Como implementar recursão em Rust?
Olá a todos! Estou tentando implementar uma função recursiva para calcular fatorial em Rust, mas me deparei com um problema inesperado. Escrevi um código simples:
fn factorial(n: u32) -> u32 {
if n == 0 {
1
} else {
n * factorial(n - 1)
}
}
fn main() {
println!("{}", factorial(5));
}O código compila e funciona, mas ao tentar aumentar a profundidade da recursão (por exemplo, factorial(20000)), o programa trava com estouro de pilha. Eu sei que Rust não tem otimização de tail recursion, e isso é esperado. No entanto, quero entender como implementar recursão corretamente em Rust quando a profundidade pode ser grande.
O que já tentei:
- Usar uma abordagem iterativa com loop (funciona, mas quero especificamente recursão)
- Tentei escrever tail recursion com um acumulador:
fn factorial_tail(n: u32, acc: u32) -> u32 {
if n == 0 {
acc
} else {
factorial_tail(n - 1, n * acc)
}
} No answers yet.
Faça login para deixar uma resposta