Recursividad
Clase 5 de 74 min de lectura
¿Una función que se llama a sí misma? Suena a trabalenguas, pero es una técnica de programación con nombre propio: la recursividad.
Pero claro, si una función se llama a sí misma, ¿cuándo termina? ¿Cómo evitamos que se llame infinitamente? Con una condición base: un caso en el que la función deja de llamarse y sale.
Ejemplo de recursividad#
Vamos a crear una función que cuente desde un número hasta cero. Fíjate en dos cosas: el if del principio, que es la condición base, y la última línea, donde la función se llama a sí misma.
function cuentaAtras(numero) { // Condición base: Si el número que recibe es // menor de 0 entonces salimos de la función if (numero < 0) { return } // Si el número era mayor o igual a 0, lo mostramos console.log(numero) // Y llamamos a la función con el número anterior cuentaAtras(numero - 1)}Si llamamos a la función con el número 3, el resultado será:
cuentaAtras(3)// -> 3// -> 2// -> 1// -> 0La ejecución la veríamos así:
Usando recursividad y devolviendo un valor#
Una función recursiva también puede devolver un valor, y por eso la recursividad se usa muchas veces para resolver algoritmos. Por ejemplo, vamos a calcular el factorial de un número.
Dicho de otra manera: el factorial de 5 es 5 multiplicado por el factorial de 4. Y esa definición, que se apoya en sí misma, es justo lo que hace el return del else:
function factorial(n) { // Condición base: Si el número es 0 o 1, devolvemos 1 // y no llamamos a la función de nuevo if (n === 0 || n === 1) { return 1 } else { // Si el número es mayor que 1, llamamos a la función return n * factorial(n - 1) }}console.log(factorial(5)) // -> 120console.log(factorial(3)) // -> 6Cada llamada se queda esperando el resultado de la siguiente, hasta que la condición base devuelve el primer valor.
function factorial(n) { if (n === 0 || n === 1) { return 1 } else { return n * factorial(n - 1) }} console.log(factorial(3))console.log muestra 6. La última llamada en entrar fue la primera en resolverse.La recursividad cuesta entenderla al principio. A mucha gente le vuela la cabeza.
¿Qué te recomiendo para aprenderlo? Primero, entiende los ejemplos que hemos hecho y dibuja en un papel cómo se ejecutan las funciones.
Después, haz estos ejercicios de recursividad:
-
La suma de los primeros n números. Escribe una función que calcule la suma de los primeros n números enteros de forma recursiva. Por ejemplo:
suma(3) -> 1 + 2 + 3 = 6 -
La sucesión de Fibonacci. Escribe una función que la calcule de forma recursiva. La sucesión de Fibonacci es una serie de números que empieza por 0 y 1 y en la que cada número es la suma de los dos anteriores. Por ejemplo:
fibonacci(6) -> 8 (0, 1, 1, 2, 3, 5, 8)
En resumen
- La recursividad consiste en que una función se llame a sí misma.
- Toda función recursiva necesita una condición base que detenga las llamadas; sin ella, se llamaría infinitamente.
- Una función recursiva también puede devolver un valor construido con el resultado de sus propias llamadas, como
n * factorial(n - 1).