Closed
Description
For numbers around 60 or higher, the recursive Fibonacci never returns. Or it just takes longer than I have patience for.
Example:
https://repl.it/@ryanpcmcquen/WoefulQuarrelsomePublishers-1
pub fn fibonacci_recursive(n: i32) -> u64 {
if n < 0 {
panic!("{} is negative!", n);
}
match n {
0 => panic!("zero is not a right argument to fibonacci_recursive()!"),
1 | 2 => 1,
3 => 2,
/*
50 => 12586269025,
*/
_ => fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2)
}
}
/**
* Non recursive function.
*/
pub fn fibonacci(n: i32) -> u64 {
if n < 0 {
panic!("{} is negative!", n);
} else if n == 0 {
panic!("zero is not a right argument to fibonacci()!");
} else if n == 1 {
return 1;
}
let mut sum = 0;
let mut last = 0;
let mut curr = 1;
for _i in 1..n {
sum = last + curr;
last = curr;
curr = sum;
}
sum
}
fn main() {
println!("{}", fibonacci(60));
println!("{}", fibonacci_recursive(60));
}
Metadata
Metadata
Assignees
Labels
No labels