Recursividad
Publicado por Clayder (2 intervenciones) el 02/12/2008 00:07:32
Hola:
Quisiera que me respondan el siguiente post, mas que todo para reafirmar si lo que estoy pensando esta bien. Bueno, ya todos seguro conocen a la famosa funcion factorial recursiva. Ahora quisiera saber que sucede en la memoria con esto.
Por ejemplo si tengo la funcion factorial como sigue:
factorial(numero)
si numero=1 entonces
retornar 1
sino
retornar numero*factorial(numero-1)
fin si
fin factorial
Si hago factorial(5), bueno la respuesta es 120; pero ¿como se van almacenando las llamadas a las funciones?
Sé que es algo de una memoria pila. Sin embargo, como funciona esta memoria exactamente?, ¿es solo para las funciones recursivas?.
Segun lo que entendí yo, si hago factorial(5).
1° apilará factorial(5)
2° apilará factorial(4)
3° apilará factorial(3)
4° apilará factorial(2)
5° apilará factorial(1)
Aquí, como factoria(1) es el caso base, entonces comenzará a desapilar(liberar memoria)
(¿desapalir=liberar memoria?)
6° desapilará factorial(1)=1
7° desapilará factorial(2)=2
8° desapilará factorial(3)=6
9° desapilará factorial(4)=24
10° desapilará factorial(5)=120
La idea que tengo es correcta? o en algo me equivocado?. Ademas si fueran tan amables, me gustaria saber que sucede cada vez que declaramos una variable o una funcion o una constante; es decir, ¿en donde se guardan exactamente?
Gracias por su respuesta.
Quisiera que me respondan el siguiente post, mas que todo para reafirmar si lo que estoy pensando esta bien. Bueno, ya todos seguro conocen a la famosa funcion factorial recursiva. Ahora quisiera saber que sucede en la memoria con esto.
Por ejemplo si tengo la funcion factorial como sigue:
factorial(numero)
si numero=1 entonces
retornar 1
sino
retornar numero*factorial(numero-1)
fin si
fin factorial
Si hago factorial(5), bueno la respuesta es 120; pero ¿como se van almacenando las llamadas a las funciones?
Sé que es algo de una memoria pila. Sin embargo, como funciona esta memoria exactamente?, ¿es solo para las funciones recursivas?.
Segun lo que entendí yo, si hago factorial(5).
1° apilará factorial(5)
2° apilará factorial(4)
3° apilará factorial(3)
4° apilará factorial(2)
5° apilará factorial(1)
Aquí, como factoria(1) es el caso base, entonces comenzará a desapilar(liberar memoria)
(¿desapalir=liberar memoria?)
6° desapilará factorial(1)=1
7° desapilará factorial(2)=2
8° desapilará factorial(3)=6
9° desapilará factorial(4)=24
10° desapilará factorial(5)=120
La idea que tengo es correcta? o en algo me equivocado?. Ademas si fueran tan amables, me gustaria saber que sucede cada vez que declaramos una variable o una funcion o una constante; es decir, ¿en donde se guardan exactamente?
Gracias por su respuesta.
Valora esta pregunta


0