Avatar ·

¿Cómo implementar recursión en Rust?

¡Hola a todos! Estoy intentando implementar una función recursiva para calcular el factorial en Rust, pero me encontré con un problema inesperado. Escribí un código simple:

fn factorial(n: u32) -> u32 {
    if n == 0 {
        1
    } else {
        n * factorial(n - 1)
    }
}

fn main() {
    println!("{}", factorial(5));
}

El código compila y funciona, pero al intentar aumentar la profundidad de la recursión (por ejemplo, factorial(20000)) el programa falla con desbordamiento de pila. Sé que Rust no tiene optimización de tail recursion, y esto es esperado. Sin embargo, quiero entender cómo implementar correctamente la recursión en Rust cuando la profundidad puede ser grande.

Lo que ya he probado:

  • Usar un enfoque iterativo con un bucle (funciona, pero quiero específicamente recursión)
  • Intenté escribir tail recursion con un acumulador:
fn factorial_tail(n: u32, acc: u32) -> u32 {
    if n == 0 {
        acc
    } else {
        factorial_tail(n - 1, n * acc)
    }
}