Comunidad de diseño web y desarrollo en internet online

¿Error de Actionscript? Sentencia Return

Citar            
MensajeEscrito el 28 Sep 2006 03:44 pm
Hola.

En este código (no hace falta que analiceis su función), ¿cómo es posible que tenga que utilizar un segundo return para terminar la ejecución de la función? Es decir, por lo visto el primer return lo hace, ya que si pongo un trace justo después no lo muestra pero, teniendo en cuenta que esta es una función recursiva y que sólo se le llama una vez desde fuera, ¿por qué sigue ejecutándose?


Código :

function sudoku_VA(i:Number, j:Number, sol:Array, inicial:Array):Boolean {
   // si la casilla está vacía...
   if (!inicial[i][j]) {
      for (var k:Number = 9; k>=1; k--) {
         //Marcar
         sol[i][j] = k;
         if (es_factible(i, j, sol)) {
            if (i == 8 && j == 8) {
               for (var v:Number = 0; v<=8; v++) {
                  trace(sol[v]);
               }
               // tablero completado
               a = false;
               /// HACE 
               return true;
            }
            // SI NO FUESE POR ESTE RETURN, LA FUNCIÓN SEGUIRÍA LLAMÁNDOSE 
            if (!a) {
               return true;
            }
            /////////////////////////////////////////////////////////////
            else if (i<8 && j == 8) {
               sudoku_VA(i+1, 0, sol, inicial);
            } else if (i<=8 && j<8) {
               sudoku_VA(i, j+1, sol, inicial);
            }
         }
         
         //Desmarcar                                     
         sol[i][j] = 0;
      }
   } else {
      if (i == 8 && j == 8) {
         for (var v:Number = 0; v<=8; v++) {
            trace(sol[v]);
         }
      } else if (i<8 && j == 8) {
         sudoku_VA(i+1, 0, sol, inicial);
      } else if (i<=8 && j<8) {
         sudoku_VA(i, j+1, sol, inicial);
      }
   }
}


Como veo que me semi-ignora el primer return, le he dicho que me indique el momento en que quiere salir y, mediante un if, hago la comprobación. Cuando encuentra el segundo return si que deja la ejecución, ¿por qué no en el primero?

No consigo entenderlo :crap:

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

opera
Citar            
MensajeEscrito el 28 Sep 2006 09:10 pm
Ya lo pillo.

Al ser recursiva la única función que finaliza es la última llamada, pues siguen estando las anteriores.

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

opera

 

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