[C con Clase] Duda sobre Funciones recursivas
Pablo Alejandro Herrero
pablusplus en gmail.com
Mar Feb 7 17:14:43 CET 2012
Hola que tal amigos.
Me empieza a salir humo por las orejas con el tema de las funciones
recursivas. He leído varios sitios en la web para ver si me aclaro, pero
hasta el momento os pongo lo que he entendido de esto, para ver si estoy en
lo cierto o no.
Hola, creo entender tu duda. Lo que ocurre en una función recursiva es que
esta se llama a sí misma con lo cual (como con cualquier llamada a función)
cada vez que se invoca la función quedan sus parámetros de ejecucución en
la pila (stack). Por este motivo una vez que ocurre la última llamada,
empieza el retorno (se "desapilan" las llamadas anteriores). por eso se
habla de niveles de recursión: es util para recorrer estructuras de datos
como árboles pero hay que evitar que se llame muchas veces para evitar un
desbordamiento de la pila: en gral la pila asignada a un programa tiene un
tamaño determinado pero hoy por hoy es muuuucho más flexible que en tiempos
de DOS.
Te paso tu texto, pero modificado: seria la lectura de la ejecución
paso a paso para que veas el retorno de cada nivel de recursión.
function factorial(n){
if(n==1)
return 1
else
return n * factorial(n-1) //acá se produce la recursión!!!
}
Bien, si tenemos como n = 5, ¿esto se leería así / es lo que pasaría? :
function factorial(5){
--------------------------------------- LLAMADA A FUNCION
-------------------------------------
if(n==1) //FALSE
return 1
else
return n * factorial(n-1) //PASA 4
}
----------------------------------- 1ER NIVEL DE RECURSION
---------------------------------
function factorial(4){
if(n==1) //FALSE
return 1
else
return n * factorial(n-1) //PASA 3
}
----------------------------------- 2DO NIVEL DE RECURSION
---------------------------------
function factorial(3){
if(n==1) //FALSE
return 1
else
return n * factorial(n-1) //PASA 2
}
----------------------------------- 3ER NIVEL DE RECURSION
---------------------------------
function factorial(2){
if(n==1) //FALSE
return 1
else
return n * factorial(n-1) //PASA 1
}
----------------------------------- 4TO NIVEL DE RECURSION
---------------------------------
function factorial(1){
if(n==1) //TRUE
return 1
----------------------- EMPIEZAN LOS RETORNOS!! --------------------------
----------------------------------- 4TO NIVEL DE RECURSION
---------------------------------
function factorial(2){
...
return n * 1 //RETORNA (2 * 1)
}
----------------------------------- 3ER NIVEL DE RECURSION
---------------------------------
function factorial(3){
...
return n * 2 //RETORNA 3 * (2 * 1)
}
----------------------------------- 2DO NIVEL DE RECURSION
---------------------------------
function factorial(4){
...
return n * 6 //RETORNA 4 * ( 3 * (2 * 1))
}
----------------------------------- 1ER NIVEL DE RECURSION
---------------------------------
function factorial(5){
...
return n * 24 //RETORNA 5 *(4 * (3 * (2 * 1)))
}
------------------------------- retorno llamada
----------------------------------------------------
120 = (5 * (4 * (3 * (2 * 1))))
Estudiate lel mecanismo de las llamadas a funcion y la pila. Eso te va a
completar el panorama. Espero te sirva!
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20120207/241ca98e/attachment.html>
Más información sobre la lista de distribución Cconclase