Skip to content

Instantly share code, notes, and snippets.

@bananaumai
Last active March 24, 2019 15:02
Show Gist options
  • Save bananaumai/4bdaf5eb3189c672c55e127d4fcc8296 to your computer and use it in GitHub Desktop.
Save bananaumai/4bdaf5eb3189c672c55e127d4fcc8296 to your computer and use it in GitHub Desktop.
rust code example - fibonacci generator
fn fib(n: usize) -> Vec<u64> {
let mut fibs = Vec::new();
while fibs.len() < n {
let current = match fibs.len() {
0 => 0,
1 => 1,
_ => {
fibs.iter().rev().take(2).sum()
}
};
fibs.push(current);
}
fibs
}
fn fib2(n: usize) -> Vec<usize> {
let mut fibs = Vec::new();
let mut cnt = 0;
let mut current = 0;
let mut prev1 = 0;
while cnt < n {
match cnt {
0 => {
current = 0;
},
1 => {
current = 1;
},
2 => {
prev1 = current;
current = 1;
},
_ => {
let prev2 = prev1;
prev1 = current;
current = prev2 + prev1;
}
};
fibs.push(current);
cnt += 1;
}
fibs
}
fn main() {
// fib
assert_eq!(fib(1), vec![0]);
assert_eq!(fib(2), vec![0, 1]);
assert_eq!(fib(3), vec![0, 1, 1]);
assert_eq!(fib(4), vec![0, 1, 1, 2]);
assert_eq!(fib(5), vec![0, 1, 1, 2, 3]);
assert_eq!(fib(6), vec![0, 1, 1, 2, 3, 5]);
assert_eq!(fib(7), vec![0, 1, 1, 2, 3, 5, 8]);
assert_eq!(fib2(8), vec![0, 1, 1, 2, 3, 5, 8, 13]);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment