Pregunta: | 9089 - DE QUE MANERA SE MANEJA EL STACK CUANDO HAY RECURSIVIDAD |
Autor: | victor manuel hoyos valencia |
ME GUSTARIA SABER COMO TRABAJAN LAS FUNCIONES EN EL STACK DE LA MEMORIA CUANDO UNA FUNCION SE EVOCA A SI MISMA .
Y TAMBIEN DE COMO SE PUDE OCUPAR O ACCESAR LUGARES DE MEMORIA DE OTRO PROGRAMA MUCHAS GRACIAS POR SU COLABORACION |
Respuesta: | Marco Antonio |
Cuando se llama a una función, sus parámetros se almacenan en la pila. Además, las variables locales de la función, también se guardan en ella. De esta forma, la pila va aumentando y disminuyendo su tamaño, dependiendo de las llamadas.
Si tu tienes la función que calcula el factorial: int factorial(int n) { if (n == 0) return 1; else return n*factorial(n-1); } cuando desde fuera se llama a factorial(3), se apila el 3. En la instrucción 'if (n==0)', la función mira el valor de la pila, y comprueba si es cero. Como no lo es, va por el else, y llama a la función 'factorial(n-1)'; para eso, mete un dos en la pila, y se vuelve a repetir el proceso. Cuando se llega a la llamada 'factorial(0)', se comprueba que n==0, y se devuelve un 1. Cuando la función sale, los parámetros y las variables locales se eliminan de la pila. De esta forma, cuando en la ejecución de 'factorial(3)', se llama al 'factorial(2)', se apila el 2, y se llama a la función. Cuando se vuelve, se desapila el 2, y se utiliza el resultado devuelto, para multiplicarlo por 'n' y devolverlo. Espero que te sirva! |