Articles

Función recursiva de JavaScript

Resumen: en este tutorial, aprenderá a usar la técnica de recursión para desarrollar una función recursiva de JavaScript, que es una función que se llama a sí misma.

Introducción a las funciones recursivas de JavaScript

Una función recursiva es una función que se llama a sí misma hasta que no lo hace.

Supongamos que tiene una función llamada recurse(). La recurse() es una función recursiva si se llama a sí misma dentro de su cuerpo, de la siguiente manera:

function recurse() { // ... recurse(); // ...}
Code language: JavaScript (javascript)

Una función recursiva siempre tiene una condición para dejar de llamarse a sí misma, de lo contrario, se llamará a sí misma indefinidamente. Por lo tanto, una función recursiva suele tener el siguiente aspecto:

function recurse() { if(condition) { // stop calling itself //... } else { recurse(); }}
Code language: JavaScript (javascript)

Generalmente, las funciones recursivas se utilizan para descomponer un problema grande en otros más pequeños. Puede encontrar que se utilizan mucho en las estructuras de datos, como árboles binarios y gráficos y algoritmos, como búsqueda binaria y quicksort.

JavaScript función recursiva ejemplos

veamos algunos ejemplos de uso de las funciones recursivas.

1) Un ejemplo simple de función recursiva de JavaScript

Supongamos que necesita desarrollar una función que cuenta regresiva de un número especificado a 1. Por ejemplo, para contar de 10 a 1:

321

El siguiente ejemplo muestra el countDown() función:

function countDown(fromNumber) { console.log(fromNumber);}countDown(3);
Code language: JavaScript (javascript)

Este countDown(3) muestra sólo el número 3.

Para hacer una cuenta regresiva del número 3 al 1, puede:

  1. mostrar el número 3.
  2. y llame al countDown(2) que muestra el número 2.
  3. y llame al countDown(1) que muestra el número 1.

Lo siguiente cambia el countDown() a una función recursiva:

Este countDown(3) se ejecutará hasta que se supere el tamaño de la pila de llamadas, de la siguiente manera:

Uncaught RangeError: Maximum call stack size exceeded.
Code language: JavaScript (javascript)

because condición para dejar de llamarse a sí mismo.

La cuenta atrás se detendrá cuando el siguiente número sea cero, por lo tanto, agregamos una condición if de la siguiente manera:

Salida:

321

El countDown() parece funcionar como se espera.

Sin embargo, como se menciona en el tutorial Tipo de función, el nombre de la función es una referencia al objeto de función real.

Si en algún lugar del código, el nombre de la función se establece en null, la función recursiva dejará de funcionar.

Por ejemplo, el código siguiente, se producirá un error:

let newYearCountDown = countDown;// somewhere in the codecountDown = null;// the following function call will cause an errornewYearCountDown(10);
Code language: JavaScript (javascript)

Error:

Uncaught TypeError: countDown is not a function
Code language: JavaScript (javascript)

Como el script funciona:

  • Primero, asigne el nombre de la función countDown a la variable newYearCountDown.
  • En segundo lugar, establezca la referencia de función countDown a null.
  • En tercer lugar, llame a la función newYearCountDown.

El código causa un error porque el cuerpo de la función countDown() hace referencia al nombre de la función countDown que se estableció en null en el momento de llamar a la función.

Para solucionarlo, puede usar una expresión de función con nombre de la siguiente manera:

2) Calcular la suma de dígitos de un número ejemplo

Dado un número, por ejemplo, 324, calcular la suma de dígitos 3 + 2 + 4 = 9.

Para aplicar la técnica recursiva, puede utilizar los siguientes pasos:

f(324) = 4 + f(32)f(32) = 2 + f(3)f(3) = 3 + 0 (stop here)

Así

f(324) = 4 + f(32) f(324) = 4 + 2 + f(3) f(324) = 4 + 2 + 3

el siguiente ejemplo muestra El sumOfDigits() función recursiva:

Cómo funciona:

Resumen

  • Una función recursiva es una función que se llama a sí misma hasta que no
  • Una función recursiva siempre tiene una condición que se detiene la función de llamar a sí mismo.
  • Fue este tutorial útil ?
  • YesNo