¿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)
}
}