Introducción a la Recursión

La recursión es una técnica de programación donde una función se llama a sí misma para resolver un problema. Este enfoque es útil para problemas que se pueden dividir en subproblemas similares. La recursión permite escribir soluciones elegantes y concisas para problemas complejos, aunque también puede ser menos eficiente en términos de tiempo y espacio si no se implementa cuidadosamente.

Factorial de un Número

El cálculo del factorial de un número es un ejemplo clásico de recursión. El factorial de un número n (denotado como n!) es el producto de todos los enteros positivos hasta n. Por definición, el factorial de 0 es 1. Aquí tienes un ejemplo en Python:

# Ejemplo de cálculo del factorial en Python
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)

# Ejemplo de uso
print("Factorial de 5:", factorial(5))  # Salida: Factorial de 5: 120

En este ejemplo, la función factorial se llama a sí misma con n-1 hasta que n es igual a 0. Esto demuestra cómo un problema puede dividirse en subproblemas más pequeños.

Serie de Fibonacci

La serie de Fibonacci es otra aplicación clásica de la recursión. Cada número en la serie es la suma de los dos números anteriores. Los primeros dos números son 0 y 1 por definición. Aquí tienes un ejemplo en Python:

# Ejemplo de cálculo de la serie de Fibonacci en Python
def fibonacci(n):
    if n <= 1:
        return n
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)

# Ejemplo de uso
print("Fibonacci de 6:", fibonacci(6))  # Salida: Fibonacci de 6: 8

En este ejemplo, la función fibonacci se llama a sí misma con n-1 y n-2, acumulando los resultados hasta llegar a los casos base de 0 y 1.

Búsqueda Binaria Recursiva

La búsqueda binaria es una técnica eficiente para encontrar un elemento en una lista ordenada. La versión recursiva de la búsqueda binaria divide repetidamente la lista a la mitad hasta que encuentra el elemento o determina que no está presente. Aquí tienes un ejemplo en Python:

# Ejemplo de búsqueda binaria recursiva en Python
def busqueda_binaria(lista, elemento, bajo, alto):
    if bajo > alto:
        return -1
    medio = (bajo + alto) // 2
    if lista[medio] == elemento:
        return medio
    elif lista[medio] > elemento:
        return busqueda_binaria(lista, elemento, bajo, medio - 1)
    else:
        return busqueda_binaria(lista, elemento, medio + 1, alto)

# Ejemplo de uso
numeros = [1, 3, 5, 7, 9, 11]
elemento = 7
indice = busqueda_binaria(numeros, elemento, 0, len(numeros) - 1)
print("Elemento encontrado en el índice:", indice)  # Salida: Elemento encontrado en el índice: 3

En este ejemplo, la función busqueda_binaria divide la lista en mitades recursivamente hasta encontrar el elemento buscado o determinar que no está presente.

Problema de las Torres de Hanoi

El problema de las Torres de Hanoi es un desafío de recursión donde se deben mover una serie de discos de una torre a otra, siguiendo reglas específicas. La recursión proporciona una solución elegante a este problema. Aquí tienes un ejemplo en Python:

# Ejemplo del problema de las Torres de Hanoi en Python
def torres_de_hanoi(n, desde, hasta, auxiliar):
    if n == 1:
        print(f"Mover disco 1 desde {desde} hasta {hasta}")
    else:
        torres_de_hanoi(n - 1, desde, auxiliar, hasta)
        print(f"Mover disco {n} desde {desde} hasta {hasta}")
        torres_de_hanoi(n - 1, auxiliar, hasta, desde)

# Ejemplo de uso
torres_de_hanoi(3, 'A', 'C', 'B')
# Salida:
# Mover disco 1 desde A hasta C
# Mover disco 2 desde A hasta B
# Mover disco 1 desde C hasta B
# Mover disco 3 desde A hasta C
# Mover disco 1 desde B hasta A
# Mover disco 2 desde B hasta C
# Mover disco 1 desde A hasta C

En este ejemplo, la función torres_de_hanoi utiliza la recursión para mover los discos entre torres siguiendo las reglas del problema.

Conclusión

Los algoritmos de recursión son herramientas poderosas en la programación, permitiendo resolver problemas complejos de manera elegante. Sin embargo, es crucial comprender los fundamentos y limitaciones de la recursión para evitar problemas de eficiencia. Practicar con ejemplos clásicos como el factorial, la serie de Fibonacci, la búsqueda binaria y las Torres de Hanoi ayudará a fortalecer tus habilidades en este enfoque.