Avatar ·

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