Est-il possible de créer une fermeture récursive en Rust ?
Bonjour à tous ! J'apprends Rust et j'essaie d'écrire une fermeture récursive pour calculer la factorielle. Voici mon code :
```rust
let factorial = |n: u32| -> u32 {
if n <= 1 {
1
} else {
n * factorial(n - 1) // erreur : cannot capture `factorial` in its own initializer
}
};
```
Le compilateur donne l'erreur : "cannot capture `factorial` in its own initializer". Je comprends que la fermeture ne peut pas capturer une variable qui n'est pas encore complètement initialisée. Mais comment faire une fermeture récursive ?
J'ai essayé de déclarer `factorial` comme `let factorial: Box u32>`, mais cela n'a pas aidé. Je sais qu'on peut utiliser une fonction normale `fn factorial(n: u32) -> u32`, mais j'ai besoin d'une fermeture car je veux capturer des variables externes.
Dites-moi comment organiser correctement la récursion dans une fermeture ? De préférence avec un exemple de code qui fonctionne. Merci d'avance !
<<>>
Le problème des fermetures récursives en Rust
Effectivement, directement