La Web del Programador: Comunidad de Programadores
 
    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!