Défi
Énoncé
Déclarer la struct Fib { a: u64, b: u64 } où a et b sont les deux derniers termes calculés. Implémenter Iterator pour Fib : la méthode next retourne Some(self.a) puis met à jour l'état interne avec (self.a, self.b) = (self.b, self.a + self.b). Fournir une fonction ou méthode associée Fib::new() -> Self qui initialise l'itérateur avec a = 0, b = 1. Dans main, utiliser .take(10).collect::<Vec<u64>>() pour récupérer les dix premiers termes et les afficher avec println!.
Contraintes
- Compilé avec
rustc --edition=2021 main.rs. - L'itérateur est infini :
nextne retourne jamaisNone. - Utiliser
u64pour supporter les termes jusqu'à F(93) sans débordement. - L'état interne doit être entièrement contenu dans la struct (pas de variable globale ni de closure).
- Les méthodes de l'API
Iterator(take,collect,sum, etc.) doivent être utilisables sans implémentation supplémentaire.
Exemple
Sortie attendue :
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]