La recursividad es una técnica en la programación que consiste en que una función se llama a sí misma para resolver un problema. Este enfoque es útil cuando un problema puede descomponerse en subproblemas de la misma naturaleza.
Una función recursiva es aquella que:
Sin una condición de salida, la función se ejecutaría
infinitamente, provocando un error de recursión
(RecursionError).
def funcion_recursiva(parametro):
if condicion_de_salida:
return resultado
else:
return funcion_recursiva(nuevo_parametro)
El factorial de un número n (denotado como
n!) se define como:
n! = n × (n - 1) × (n - 2) × ... × 1
def factorial_iterativo(n):
resultado = 1
for i in range(1, n + 1):
resultado *= i
return resultado
print(factorial_iterativo(5)) # Resultado: 120
def factorial_recursivo(n):
if n == 1:
return 1
else:
return n * factorial_recursivo(n - 1)
print(factorial_recursivo(5)) # Resultado: 120
Llamar a factorial_recursivo(5) genera estas
llamadas:
factorial_recursivo(5)
=> 5 * factorial_recursivo(4)
=> 5 * 4 * factorial_recursivo(3)
=> 5 * 4 * 3 * factorial_recursivo(2)
=> 5 * 4 * 3 * 2 * factorial_recursivo(1)
=> 5 * 4 * 3 * 2 * 1 = 120
Cada llamada queda en pausa esperando el resultado de la siguiente. Esto se pila de llamadas (call stack).
Python limita la cantidad de llamadas recursivas para evitar un desbordamiento de pila (stack overflow). Si excedes ese límite, verás un error como:
RecursionError: maximum recursion depth exceeded
Puedes ver o modificar este límite con el módulo sys:
import sys
print(sys.getrecursionlimit()) # Por defecto: 1000