Comment implémenter la récursion en Rust ?
Bonjour à tous ! J'essaie d'implémenter une fonction récursive pour calculer la factorielle en Rust, mais je suis confronté à un problème inattendu. J'ai écrit un code simple :
fn factorial(n: u32) -> u32 {
if n == 0 {
1
} else {
n * factorial(n - 1)
}
}
fn main() {
println!("{}", factorial(5));
}Le code se compile et fonctionne, mais lorsque j'essaie d'augmenter la profondeur de récursion (par exemple, factorial(20000)), le programme plante avec un débordement de pile. Je sais que Rust n'a pas d'optimisation de la récursion terminale, et c'est attendu. Cependant, je veux comprendre comment implémenter correctement la récursion en Rust lorsque la profondeur peut être grande.
Ce que j'ai déjà essayé :
- Utiliser une approche itérative avec une boucle (ça marche, mais je veux spécifiquement de la récursion)
- J'ai essayé d'écrire une récursion terminale avec un accumulateur :
fn factorial_tail(n: u32, acc: u32) -> u32 {
if n == 0 {
acc
} else {
factorial_tail(n - 1, n * acc)
}
}