Diferencia entre revisiones de «Programación en JavaScript/Funciones»

Contenido eliminado Contenido añadido
Raulbcneo (discusión | contribs.)
Raulbcneo (discusión | contribs.)
Línea 137:
== Funciones recursivas ==
 
EsteLas tipofunciones de funcionesrecursivas son funciones normales, peroaquellas que se llaman a si mismas. Existen multitud de técnicas para desarrollar este tipo de funciones, ya que sus usos son muy diversos, pero fundamentalmente hay que tener en consideración que son funciones peligrosas, porque si no controlamos su ejecución, se estarán ejecutando indefinidamente, como en el caso de los bucles infinitos. La diferencia con los bucles infinitos es que dependiendo de la implementación del interpreteintérprete de JavaScript, es posible que rompamos la pila de memoria, que ya vimos antes, con lo que además de colgar el navegador, podemos generar una excepción de memoria y un error grave del sistema. Para evitarlo, claro está, debemos estudiar bien la lógica de la función para construirla adecuadamente. Por ejemplo, si queremos calcular el factorial de un número, podemos hacerlo con una función recursiva:
 
{{JavaScript/Reservada|function}} factorial(numero)
{
{
{{JavaScript/Reservada|if}} (numero == 1 || numero == 0)
{{JavaScript/Reservada|return}} 1;
{{JavaScript/Reservada|else}}
{{JavaScript/Reservada|return}} numero*factorial(numero - 1);
}
}
document.write(factorial(4));
 
Supóngase la llamada a esta función para N=4, es decir ''factorial(4)''. Cuando se llame por primera vez a la función, la variable ''numero'' valdrá 4, y por tanto devolverá el valor de 4*factorial(3); pero factorial(3) devolverá 3*factorial(2); factorial(2) a su vez es 2*factorial(1) y dado que factorial(1) es igual a 1 (es importante considerar que sin éste u otro caso particular, llamado caso base, la función recursiva no terminaría nunca de llamarse a sí misma), el resultado final será 4*(3*(2*1)).
 
<noinclude>{{Navegador|libro=Programación en JavaScript
|actual=Funciones
|anterior=Control / Bucles
|siguiente=FuncionesJS
}}</noinclude>