Avatar ·

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