fib_sequence/fibonacci/
mod.rs1use 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}