Skip to content

Commit e4ea7d5

Browse files
committed
feat: improve fibonacci example
1 parent d21e5f2 commit e4ea7d5

3 files changed

Lines changed: 33 additions & 8 deletions

File tree

fibonacci-1/src/fibonacci/mod.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
use crate::fibonacci::rec::Recursive;
2+
3+
mod rec;
4+
5+
pub trait Fibonacci {
6+
fn fibonacci(&self, n: i32) -> i64;
7+
}
8+
9+
pub fn choose(name: &str) -> Box<dyn Fibonacci> {
10+
match name {
11+
"recursive" => Box::new(Recursive {}),
12+
_ => panic!("no such a fibonacci implementation named {}", name),
13+
}
14+
}

fibonacci-1/src/fibonacci/rec.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
use crate::fibonacci::Fibonacci;
2+
3+
pub struct Recursive {}
4+
5+
impl Fibonacci for Recursive {
6+
fn fibonacci(&self, n: i32) -> i64 {
7+
if n == 0 || n == 1 {
8+
1
9+
} else {
10+
self.fibonacci(n - 1) + self.fibonacci(n - 2)
11+
}
12+
}
13+
}

fibonacci-1/src/main.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
fn fibonacci(n: u64) -> u64 {
2-
if n == 0 || n == 1 {
3-
return 0;
4-
} else {
5-
fibonacci(n - 1) + fibonacci(n - 2)
6-
}
7-
}
1+
use crate::fibonacci::choose;
2+
3+
mod fibonacci;
84

95
fn main() {
10-
println!("{}", fibonacci(10));
6+
let r = choose("recursive");
7+
8+
println!("{}", r.fibonacci(10));
119
}

0 commit comments

Comments
 (0)