Ver Mensaje Individual
  #3 (permalink)  
Antiguo 20/09/2008, 10:13
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Consulta Basica sobre Recursividad.

El "problema" (de hecho no lo es, sino mas bien un error de programación tuyo) es que el ejecutar (recursivamente o no) la función Test() no termina la ejecución de la función.

Ejemplo: Yo tengo una función que ejecuta a, b y c. b es un proceso que llama nuevamente a la función hasta que se ha ejecutado 3 veces. Tienes entonecs la siguiente estructura de procesos a realizar:

Código:
Funcion:
a
b // Llama recursivamente a la función
c

Llamado a la función:
a
b // Llamando nuevamente a la función - 1
  a
  b // Llamando nuevamente a la función - 2
    a
    b // Llamando nuevamente a la función - 3
      a
      b // 4 - No se ejecuta este proceso, ya no llama a la función. Ahora falta ejecutar el proceso c, que se fue acumulando
      c // Proceso c del 3er llamado a la función
    c // Proceso c del 2do llamado a la función
  c // Proceso c del 1er llamado a la función
c // Proceso c del llamado original a la función
La "solución" (como ya te dije, no es un problema) es utilizar el keyword return en cada llamado recursivo a la función, lo que hará que su ejecución termine. El árbol de procesos quedaría así: (b ahora es un proceso que llama a la función y termina su ejecución, impidiendo que se ejecute c)

Código:
Funcion:
a
b // Llama recursivamente a la función y termina la ejecución actual usando un return
c

Llamado a la función:
a
b // Llamando nuevamente a la función terminando esta ejecución - 1
  a
  b // Llamando nuevamente a la función terminando esta ejecución - 2
    a
    b // Llamando nuevamente a la función terminando esta ejecución - 3
      a
      b // 4 - No se ejecuta, ya no llama a la función ni termina la ejecución actual
      c // Proceso c del 3er llamado a la función
Espero me hayas entendido, aplica el mismo criterio a tu función, usando return antes de Test() para finalizar así la ejecución actual

Saludos,