La recursividad es una técnica de programación donde una función se llama a sí misma para resolver un problema.
Cada vez que la función se llama, se trabaja sobre un problema más pequeño o más simple que el original, hasta llegar a una situación tan sencilla que ya no necesita seguir llamándose: el caso base.
Podemos pensar en la recursividad como un efecto dominó: cada llamada a la función empuja a la siguiente, y cuando llegamos al final (el caso base), las funciones comienzan a resolverse en orden inverso.
Partes esenciales de la recursividad:
- Llamada recursiva: La función se llama a sí misma con un problema más pequeño.
- Caso base: Es la condición que detiene las llamadas recursivas. Sin caso base, el programa nunca terminaría (causaría un "bucle infinito").
Ejemplo sencillo: Contar regresivamente
Funcion ContarRegresivamente(n)
Si n > 0 Entonces
Escribir n;
ContarRegresivamente(n-1);
Sino
Escribir "¡Fin!";
FinSi
FinFuncion
Llamada desde el programa principal:
Proceso Principal
ContarRegresivamente(5);
FinProceso
¿Cómo funciona internamente la recursividad?
Cuando usamos recursividad, las llamadas se apilan en la memoria (como platos uno sobre otro).
Cuando llegamos al caso base, el programa comienza a desapilar (resolviendo cada llamada anterior en orden inverso).
Imagina este ejemplo:
- ContarRegresivamente(3) llama a ContarRegresivamente(2)
- ContarRegresivamente(2) llama a ContarRegresivamente(1)
- ContarRegresivamente(1) llama a ContarRegresivamente(0)
- ContarRegresivamente(0) muestra "¡Fin!" y termina.
Luego:
- Se resuelve ContarRegresivamente(1)
- Luego ContarRegresivamente(2)
- Y finalmente ContarRegresivamente(3)
Ejemplo de función recursiva: Factorial de un número
El factorial de un número se define así:
0! = 1
n! = n × (n-1)!
Código:
Funcion factorial <- CalcularFactorial(n)
Definir factorial Como Entero;
Si n = 0 Entonces
factorial <- 1;
Sino
factorial <- n * CalcularFactorial(n-1);
FinSi
FinFuncion
Uso en el programa principal:
Proceso Principal
Definir numero Como Entero;
Escribir "Ingrese un número:";
Leer numero;
Escribir "El factorial es: ", CalcularFactorial(numero);
FinProceso
¿Cuándo usar recursividad?
La recursividad es útil cuando:
- El problema se puede dividir naturalmente en subproblemas más pequeños (por ejemplo, recorrer árboles o estructuras de datos).
- Es más fácil o elegante escribir la solución recursiva que una iterativa (bucles).
Ejemplos típicos de uso de la recursividad:
- Cálculo de factoriales.
- Fibonacci.
- Búsqueda en estructuras de datos como árboles.
- Resolver laberintos.
- Algoritmos de ordenamiento (como QuickSort o MergeSort).
La recursividad es poderosa pero:
- Puede consumir mucha memoria si se hacen demasiadas llamadas.
- Hay problemas que se resuelven más eficientemente usando bucles (iterativamente).
Siempre analiza si la recursividad realmente simplifica el problema antes de usarla.