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,