fib_sequence/fibonacci/
mod.rs

1use number::Number;
2mod number;
3
4pub use get::nth;
5mod get;
6
7pub struct FibonacciSequence {
8    prev: Number,
9    curr: Number,
10}
11
12impl FibonacciSequence {
13    pub fn new() -> Self {
14        Self { prev: Number::from(0), curr: Number::from(1) }
15    }
16}
17
18impl Iterator for FibonacciSequence {
19    type Item = String;
20
21    fn next(&mut self) -> Option<Self::Item> {
22        let next = format!("{}", self.prev);
23        let new_curr = &self.prev + &self.curr;
24        self.prev = std::mem::replace(&mut self.curr, new_curr);
25        Some(next)
26    }
27}
28
29#[cfg(test)]
30mod tests {
31    #[test]
32    fn fibonacci_sequence() {
33        for (index, value) in super::FibonacciSequence::new().take(5001).enumerate() {
34            println!("f({:02}) = {}", index, value);
35        }
36    }
37}