Comunidad de diseño web y desarrollo en internet online

Problemas con funcion recursiva!!

Citar            
MensajeEscrito el 04 Mar 2008 01:08 pm
Hola tengo un problema que la verdad no se si es mio o del flash ya que antes lo eh echo y no tuve drama pero ya saben como es esto jaja. :roll:
La cosa es asi, tengo una x cantidad de registros metidos en un array "propiedades" e hice una clase que lo que tendria que hacerme es ordenarmelos de forma random el index de la misma cada ves. osea que si tengo 1,2,3,4,5,6 me devuelva 6,3,4,2,5,1..
la clase es asi.

bueno no les pongo la clase ya que tiene codigo de mas que no viene al caso. sin embargo les paso la parte que hace todo ese trabajo.

Código :

//declaro variables
var numProps:int=propiedades.length;
var numRandActual:int;
var numsRand:Array=new Array();
//recorrer el array propiedades
for (var r:int=0; r<numProps; r++) {
   trace("---------");
   numRandActual=checkNumRand(getRandomInt(int(numProps-1)));
   numsRand.push(numRandActual);
}
//funcion que chekea si existe ya el numero en el array numsRand
function checkNumRand(num:int):int {
   trace("num "+num);
   for (var c:int=0; c<numsRand.length; c++) {
      trace("nr "+numsRand[c]+" num:"+num);
      if (num==numsRand[c]) {
         trace("-bk "+numsRand);
         checkNumRand(getRandomInt(int(numProps-1)));
         break;
      }
   }
   trace("return: "+num);
   return num;
}
//funcion que me devuelve un numero ramdom
function getRandomInt(num:int):int {
   return Math.floor(Math.random() * num);
}


Como veran a continuacion hago un seguimiento del array y del trabajo de las funciones y me devuelve esto:

Código :

--------- Array: ()
num 1
return nuevo numero: 1
--------- Array: (1)
num 3
nr 1 num:3
return nuevo numero: 3
--------- Array: (1,3)
num 4
nr 1 num:4
nr 3 num:4
return nuevo numero: 4
--------- Array: (1,3,4)
num 4
nr 1 num:4
nr 3 num:4
nr 4 num:4
-existe
num 1
nr 1 num:1
-existe
num 5
nr 1 num:5
nr 3 num:5
nr 4 num:5
return nuevo numero: 5
return nuevo numero: 1
return nuevo numero: 4
--------- Array: (1,3,4,4)


ahora el error esta que parece que el flash guarda en memoria las veses que la funcion se llama a si misma :cry: y la verdad que me tendria que devolver solo un return. y en ves de eso me retorna varias veses juntas!!!
QUE PUEDE ESTAR PASANDO. ANTES ESTO NO LO HACIA.. :crap:

bueno desde ya saludos y gracias.

Por phoxer

Claber

827 de clabLevel

4 tutoriales

Genero:Masculino  

Ing en Sistemas

firefox
Citar            
MensajeEscrito el 05 Mar 2008 09:48 pm
Para ordenar un array de manera aleatoria:

Código :

private function ordenAleatorio (a : Object , b : Object) : int
         {
            //Esto devuelve siempre -1 o 1 ya que Math.round(Math.random() es 0 o 1 al 50%
            return (Math.round(Math.random()) * 2) - 1;
         }


Y para usarlo:

Código :

tuArray.sort(ordenAleatorio);

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 07 Mar 2008 03:35 am
Gracias lo provare, pero igualmente me llama la atencion por que retorna varias veses a la ves!!!
quiero saber si eso es un bug o es normal. :? .. antes no lo hacia. solo retonaba una sola ves y ya.

Por phoxer

Claber

827 de clabLevel

4 tutoriales

Genero:Masculino  

Ing en Sistemas

firefox
Citar            
MensajeEscrito el 07 Mar 2008 10:18 am
Yo diría que es normal, la función se ejecuta tantas veces como se de en el bucle por lo tanto por cada ejecución corresponde un return.

Por Whitefeet

42 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 12 Mar 2008 04:24 pm
mmmm pero si haces un trace como hice yo antes del return tracea solo una ves osea que por ahi pasa una sola ves. sin embargo tira carios returns. al finalizar el proseso del bucle.
la cosa que hasta que no encuentra un resultado el bucle llama a si mismo. pero no devuelve nada.
:? capaz que en ves de un return tengo que usar otra funcion donde mande el resultado en ves de usar un retunr ... provare eso jajaja. :P

Por phoxer

Claber

827 de clabLevel

4 tutoriales

Genero:Masculino  

Ing en Sistemas

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.