Saltar al contenido principal

Factorial Recursivo

Calcula el factorial de un número usando recursión. Comprende el caso base y el caso recursivo, los pilares de cualquier función recursiva.

recursion caso base call stack math.factorial

El problema

Escribe una función factorial(n) que calcule el factorial de n usando recursión.

El factorial de n (escrito n!) se define como:

  • 0! = 1 (caso base)
  • n! = n × (n-1)! (caso recursivo)

Ejemplos

nn!cálculo
01Caso base
111 × 0! = 1 × 1
51205 × 4 × 3 × 2 × 1
103628800

Código inicial

def factorial(n):
    # Tu código aquí
    pass


print(factorial(0))   # 1
print(factorial(5))   # 120
print(factorial(10))  # 3628800

Concepto clave: recursión

Una función recursiva se llama a sí misma con un problema más pequeño hasta llegar al caso base:

factorial(5)
  = 5 × factorial(4)
       = 4 × factorial(3)
            = 3 × factorial(2)
                 = 2 × factorial(1)
                      = 1 × factorial(0)
                           = 1  ← caso base

El caso base es imprescindible. Sin él, la función se llama a sí misma infinitamente hasta producir RecursionError.

Versión iterativa (sin recursión)

def factorial_iterativo(n):
    resultado = 1
    for i in range(2, n + 1):
        resultado *= i
    return resultado

Versión con reduce

from functools import reduce

def factorial_reduce(n):
    if n == 0:
        return 1
    return reduce(lambda a, b: a * b, range(1, n + 1))

Próximos pasos

  • Implementa fibonacci de forma recursiva y compara la profundidad del call stack
  • Estudia por qué la recursión de Fibonacci es ineficiente (recalcula subproblemas) y cómo solucionarlo con @functools.lru_cache
  • Prueba el límite de Python con import sys; sys.getrecursionlimit()