Recursividad
La recursividad es un concepto de programación donde la función se llama a sí misma.
Estas son sus partes:
- Caso base: es la condición en la que se detiene la recursividad. Es decir, donde deja de llamarse a sí misma y devuelve un valor. Es necesario tener un caso base en una función para evitar un bucle infinito de llamadas recursivas. Puede existir más de un caso base.
- Llamada recursiva: es la llamada a sí misma dentro de su definición. Se deben pasar valores a los argumentos diferentes a los recibidos, si no el resultado producido sería el mismo y se produciría un bucle infinito de llamadas recursivas.
En cada llamada recursiva, el problema a resolver debe ser más simple o pequeño. Esto se conoce como reducción del problema. Por lo tanto, los valores de los parámetros cada vez que se hace una llamada deben ser más simples, hasta que se llegue a un caso base y se detenga la recursividad.
Además, cada llamada recursiva debe devolver un valor. En el caso de un caso base sería un resultado final. En el caso de una llamada recursiva, un valor que sirve para la evaluación de llamadas recursivas anteriores.
def factorial(n):
# Caso base: el factorial de 0 es 1.
if n == 0:
return 1
else:
# Llamada recursiva
# Como vemos se devuelve un valor, en este caso n por el resultado
# de una nueva llamada recursiva
return n * factorial(n-1)
numero = 5
resultado = factorial(numero)
print(f"El factorial de {numero} es {resultado}")
Recursividad con más de un caso base
Función recursiva que calcula el número de términos de una secuencia de Fibonacci hasta un índice dado.
def fibonacci(n):
# Caso base 1: si n es 0, la secuencia de Fibonacci tiene 0 términos
if n == 0:
return 0
# Caso base 2: si n es 1, la secuencia de Fibonacci tiene 1 término
elif n == 1:
return 1
else:
# Llamada recursiva para calcular el término n
return fibonacci(n - 1) + fibonacci(n - 2)