Aller au contenu principal
U/
Traits
rust

impl Iterator pour un itérateur de Fibonacci

Définir la struct Fib et implémenter le trait Iterator<Item = u64> pour qu'elle produise la suite de Fibonacci terme par terme, utilisable avec .take(10).collect().

45 minPublié le 20 mai 2026Proposé par Anonyme

Défi

// Lisez attentivement, codez sur votre machine

Énoncé

Déclarer la struct Fib { a: u64, b: u64 }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 : next ne retourne jamais None.
  • Utiliser u64 pour 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]
Espace solution
// À garder en tête
  • D'abord, faire marcher

    On ne cherche pas à optimiser : d'abord, on fait marcher le truc. Optimiser vient ensuite — et ça aussi, ça s'apprend. (Si un défi porte sur l'optimisation, son énoncé le précise.)

  • Pas de mauvaise réponse

    Il n'y a pas de mauvaise réponse à un défi. Le but, c'est de le faire. Ce qui compte, c'est de s'entraîner.

  • Trop dur ? Au suivant

    Un défi te résiste ? N'hésite pas à en prendre un autre. Ils seront encore là demain.