Contenido del curso

DFS

BFS

Backtrack

Qué es la recursión en programación

Resumen

La recursión es uno de esos conceptos que suena abstracto en programación hasta que lo vives en un ejemplo cotidiano. En pocas palabras, ocurre cuando una función se llama a sí misma para resolver un problema dividiéndolo en versiones más pequeñas. Si estás aprendiendo estructuras de datos o algoritmos, entender cómo funciona te abre la puerta a soluciones más limpias y elegantes.

Qué es la recursión y por qué se compara con cajas dentro de cajas

Imagina que buscas una manilla en tu casa. Abres un cajón, dentro hay una caja de recuerdos, dentro otra de recuerdos familiares, y dentro otra más pequeña con joyas. Ahí, por fin, está la manilla. Repetiste la misma acción (abrir una caja y buscar) sobre una entrada cada vez más pequeña hasta resolver el problema.

Eso es exactamente lo que hace una función recursiva: ejecuta la misma operación, pero cada vez sobre un subconjunto más pequeño del problema, hasta llegar a una condición que detiene el proceso.

¿Qué es la recursión en programación? Es la técnica en la que una función se llama a sí misma con una entrada más pequeña para resolver un problema dividiéndolo en partes manejables.

Si viste El origen, la analogía es la misma: un sueño dentro de un sueño dentro de otro sueño. La diferencia es que en código necesitas decidir cuándo despertar.

Por qué necesitas un caso base en una función recursiva

Sin un punto de salida, una función recursiva se llamaría a sí misma para siempre y caerías en un ciclo infinito. Para evitarlo existe el caso base: la condición que le dice a la función aquí ya encontraste, ya termina.

En el ejemplo de la manilla, el caso base es encontrarla dentro de una caja. En código, suele ser una comparación simple que retorna un valor sin volver a llamarse.

¿Qué pasa si no defino un caso base? La función se llamará indefinidamente y provocará un desbordamiento de pila (stack overflow). Siempre necesitas una condición de parada.

Esta idea es la columna vertebral de cualquier algoritmo recursivo bien escrito.

Cómo aplicar recursión con la secuencia de Fibonacci

La secuencia de Fibonacci es un ejemplo clásico que aparece en matemáticas, naturaleza y arte. Cada número resulta de sumar los dos anteriores: 0, 1, 1, 2, 3, 5, 8, 13 y así infinitamente.

Si quieres calcular Fibonacci de 8, sabes que viene de 3 + 5. Y ese 5 viene de 2 + 3. Y ese 2 viene de 1 + 1. La estructura es naturalmente recursiva: cada resultado depende de dos resultados más pequeños.

Cómo se vería el código de Fibonacci con recursión

La función recibe una posición n y devuelve el valor en esa posición. Estos son los pasos clave:

  • Define la función fib(n).
  • Si n == 0, retorna 0 (caso base).
  • Si n == 1, retorna 1 (caso base).
  • En cualquier otro caso, retorna fib(n-1) + fib(n-2).

python def fib(n): if n == 0: return 0 if n == 1: return 1 return fib(n - 1) + fib(n - 2)

La magia está en la última línea: la función se llama dos veces sobre entradas más pequeñas y suma sus resultados. Cuando n llega a 0 o 1, deja de llamarse y empieza a devolver valores hacia arriba.

Por qué la recursión simple repite cálculos

Aquí viene lo interesante. Si calculas fib(8), tu función calculará fib(6) varias veces, fib(5) varias veces y así. Estás resolviendo los mismos subproblemas una y otra vez, lo que hace al algoritmo lento cuando n crece.

Una forma de optimizarlo es guardar resultados ya calculados para reutilizarlos en lugar de recomputarlos. Esa técnica se conoce como memoization y convierte una recursión costosa en una solución eficiente.

Cuándo conviene usar recursión en lugar de un ciclo

Muchos problemas también se resuelven con un ciclo iterativo. La pregunta es cuándo elegir cada uno:

  • Usa iteración cuando el problema es lineal y el ciclo se lee con claridad.
  • Usa recursión cuando el problema se divide naturalmente en subproblemas más pequeños del mismo tipo.
  • Usa recursión cuando el código resulta más legible y expresivo que un ciclo equivalente.

Los casos típicos donde la recursión brilla incluyen recorrer árboles, navegar estructuras anidadas, algoritmos divide y vencerás y secuencias matemáticas como Fibonacci o el factorial.

Ahora un reto para ti: en la función fib que vimos, ¿cómo evitarías repetir cálculos? ¿Qué condición o estructura agregarías para guardar los resultados ya conocidos? Déjalo en los comentarios y nos leemos en la próxima clase.