<span>Hola que tal amigos.</span><br><br><span>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.</span><br>


<font color="#222222" face="arial, sans-serif">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.</font><div>


<font color="#222222" face="arial, sans-serif">    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.<br></font><span><br>
</span></div><div><span>function factorial(n){<br>   if(n==1)<br>      return 1<br>   else<br>      return n * factorial(n-1)  //acá se produce la recursión!!!</span><div><span>} <br><br>Bien, si tenemos como n = 5, ¿esto se leería así / es lo que pasaría? :<br>


</span><span>function factorial(5){<br></span><div><span>--------------------------------------- LLAMADA A FUNCION -------------------------------------</span><br></div><span>   </span><span>if(</span><span style="font-size:13px;font-family:arial,sans-serif;background-color:rgb(255,0,0)"><font color="#ffffff">n==1</font></span><span>)      //</span><span style="font-size:13px;font-family:arial,sans-serif"><span style="background-color:rgb(255,0,0)"><font color="#ffffff">FALSE</font></span></span><span style="font-family:arial,sans-serif;font-size:13px"><br>


<span>      return 1</span><br><span>   else</span><br><span>      </span></span><span style="font-family:arial,sans-serif;font-size:13px"><span style="color:rgb(34,34,34)">return n * </span></span><span style="font-family:arial,sans-serif;font-size:13px;color:rgb(34,34,34);background-color:rgb(51,255,51)">factorial(n-1)</span><span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">  //</span><span style="font-family:arial,sans-serif;font-size:13px;color:rgb(34,34,34);background-color:rgb(51,255,51)">PASA 4</span><span style="font-family:arial,sans-serif;font-size:13px"><br>


<span>} </span></span></div><span style="font-size:13px;font-family:arial,sans-serif">----------------------------------- 1ER NIVEL DE RECURSION ---------------------------------</span><br style="font-size:13px;font-family:arial,sans-serif">


<div><span>    function factorial(4){</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><font color="#222222">       </font></span><span>if(</span><span style="font-size:13px;font-family:arial,sans-serif;background-color:rgb(255,0,0)"><font color="#ffffff">n==1</font></span><span>)      //</span><span style="font-size:13px;font-family:arial,sans-serif"><span style="background-color:rgb(255,0,0)"><font color="#ffffff">FALSE</font></span></span><span style="font-family:arial,sans-serif;font-size:13px"><br>


<span>          return 1</span><br><span>       else</span><br><span>          return n * </span></span><span style="font-family:arial,sans-serif;font-size:13px;color:rgb(34,34,34);background-color:rgb(51,255,51)">factorial(n-1)</span><span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">  //</span><span style="font-family:arial,sans-serif;font-size:13px;color:rgb(34,34,34);background-color:rgb(51,255,51)">PASA 3</span><span style="font-family:arial,sans-serif;font-size:13px"><br>


<span>    } </span><br></span><span style="font-size:13px;font-family:arial,sans-serif">----------------------------------- 2DO NIVEL DE RECURSION ---------------------------------</span><br style="font-size:13px;font-family:arial,sans-serif">


<span style="font-family:arial,sans-serif;font-size:13px"><span>        function factorial(3){</span><br><span>           </span></span><span>if(</span><span style="font-size:13px;font-family:arial,sans-serif;background-color:rgb(255,0,0)"><font color="#ffffff">n==1</font></span><span>)      //</span><span style="font-size:13px;font-family:arial,sans-serif"><span style="background-color:rgb(255,0,0)"><font color="#ffffff">FALSE</font></span></span><span style="font-family:arial,sans-serif;font-size:13px"><br>


<span>              return 1</span><br><span>           else</span><br><span>              return n * </span></span><span style="font-family:arial,sans-serif;font-size:13px;color:rgb(34,34,34);background-color:rgb(51,255,51)">factorial(n-1)</span><span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">  //</span><span style="font-family:arial,sans-serif;font-size:13px;color:rgb(34,34,34);background-color:rgb(51,255,51)">PASA 2</span><span style="font-family:arial,sans-serif;font-size:13px"><br>


<span>        } </span><br></span><span style="font-family:arial,sans-serif;font-size:13px">----------------------------------- 3ER NIVEL DE RECURSION ---------------------------------</span><br style="font-family:arial,sans-serif;font-size:13px">


<span style="font-size:13px;font-family:arial,sans-serif"><span>            function factorial(2){</span><br><span>               </span></span><span>if(</span><span style="font-size:13px;font-family:arial,sans-serif;background-color:rgb(255,0,0)"><font color="#ffffff">n==1</font></span><span>)      //</span><span style="font-size:13px;font-family:arial,sans-serif"><span style="background-color:rgb(255,0,0)"><font color="#ffffff">FALSE</font></span></span><span style="font-size:13px;font-family:arial,sans-serif"><br>


<span>                  return 1</span><br><span>               else</span><br><span>                  return n * </span></span><span style="font-size:13px;font-family:arial,sans-serif;color:rgb(34,34,34);background-color:rgb(51,255,51)">factorial(n-1)</span><span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">  //</span><span style="font-size:13px;font-family:arial,sans-serif;color:rgb(34,34,34);background-color:rgb(51,255,51)">PASA 1</span><span style="font-size:13px;font-family:arial,sans-serif"><br>


<span>            } </span><br></span><span style="font-family:arial,sans-serif;font-size:13px">----------------------------------- 4TO NIVEL DE RECURSION ---------------------------------</span><br style="font-family:arial,sans-serif;font-size:13px">


<span style="font-family:arial,sans-serif;font-size:13px"><span>                function factorial(1){</span><br><span>                   if(</span><span style="color:rgb(34,34,34);background-color:rgb(51,255,51)">n==1</span><span>)  //</span><span style="color:rgb(34,34,34);background-color:rgb(51,255,51)">TRUE</span><br>


<span>                      return 1</span></span></div></div><div><span style="font-family:arial,sans-serif;font-size:13px"><span><br></span></span></div><div>
<span style="font-family:arial,sans-serif;font-size:13px"><span>----------------------- EMPIEZAN LOS RETORNOS!! --------------------------</span></span></div><div><span style="font-size:13px;font-family:arial,sans-serif">----------------------------------- 4TO NIVEL DE RECURSION ---------------------------------</span><br style="font-size:13px;font-family:arial,sans-serif">


</div><div><div><span style="font-size:13px;font-family:arial,sans-serif"><span>            function factorial(2){</span><br></span><span style="font-size:13px;font-family:arial,sans-serif"><span>                  ...</span></span></div>


<div><span style="font-size:13px;font-family:arial,sans-serif"><span>                  return n * </span></span><span style="font-size:13px;font-family:arial,sans-serif;background-color:rgb(51,102,255)"><font color="#ffffff">1</font></span><span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">  //</span><span style="font-size:13px;font-family:arial,sans-serif;background-color:rgb(51,102,255)"><font color="#ffffff">RETORNA (2 * 1)</font></span><span style="font-size:13px;font-family:arial,sans-serif"><br>


<span>            } </span></span></div></div><div><span style="font-family:arial,sans-serif;font-size:13px">----------------------------------- 3ER NIVEL DE RECURSION ---------------------------------</span></div>
<div><span>          function factorial(3){</span></div><div><div><span style="font-size:13px;font-family:arial,sans-serif"><span>                ...</span></span></div>
<div><span style="font-size:13px;font-family:arial,sans-serif"><span>                return n * </span><span style="background-color:rgb(51,102,255)"><font color="#ffffff">2</font></span></span><span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">  //</span><span style="font-size:13px;font-family:arial,sans-serif;background-color:rgb(51,102,255)"><font color="#ffffff">RETORNA 3 * (2 * 1)</font></span><span style="font-size:13px;font-family:arial,sans-serif"><br>


<span>          } </span></span></div></div><span style="font-size:13px;font-family:arial,sans-serif">----------------------------------- 2DO NIVEL DE RECURSION ---------------------------------</span><br style="font-size:13px;font-family:arial,sans-serif">


<div><span>        function factorial(4){</span></div><div><div><div><span style="font-size:13px;font-family:arial,sans-serif"><span>              ...</span></span></div>
<div><span style="font-size:13px;font-family:arial,sans-serif"><span>              return n * </span><font color="#ffffff" style="background-color:rgb(51,102,255)">6</font></span><span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">  //</span><span style="font-size:13px;font-family:arial,sans-serif;background-color:rgb(51,102,255)"><font color="#ffffff">RETORNA 4 * ( 3 * (2 * 1))</font></span><span style="font-size:13px;font-family:arial,sans-serif"><br>


<span>        } </span></span></div></div></div><div><div><span style="font-size:13px;font-family:arial,sans-serif">----------------------------------- 1ER NIVEL DE RECURSION ---------------------------------</span><br style="font-size:13px;font-family:arial,sans-serif">


</div><div><span>  function factorial(5){</span></div><div><span style="font-size:13px;font-family:arial,sans-serif"><span>        ...</span></span></div><div>
<span style="font-size:13px;font-family:arial,sans-serif"><span>        return n * </span><font color="#ffffff"><span style="background-color:rgb(51,102,255)">24</span></font><span> </span></span><span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">  //</span><span style="font-size:13px;font-family:arial,sans-serif;background-color:rgb(51,102,255)"><font color="#ffffff">RETORNA 5 *(4 * (3 * (2 * 1)))</font></span><span style="font-size:13px;font-family:arial,sans-serif"><br>


<span>  } </span></span></div></div><div><span style="font-size:13px;font-family:arial,sans-serif"><span>------------------------------- retorno llamada ----------------------------------------------------</span></span></div>


<div><span style="font-size:13px;font-family:arial,sans-serif"><span>120 = </span><span style="background-color:rgb(51,102,255)"><font color="#ffffff">(5 * (4 * (3 * (2 * 1))))</font></span></span></div>
<div><span style="font-size:13px;font-family:arial,sans-serif"><span> </span></span></div><div><span style="font-size:13px;font-family:arial,sans-serif"><span>Estudiate lel mecanismo de las llamadas a funcion y la pila. Eso te va a completar el panorama. Espero te sirva!</span></span></div>