Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::io::{stdin, stdout, Write};
- use std::sync::Mutex;
- use lazy_static::lazy_static;
- lazy_static! {
- static ref CACHE: Mutex<Vec<u64>> = Mutex::new(vec![1, 1]);
- }
- fn main() {
- loop {
- print!("Enter a positive integer: ");
- stdout().flush().expect("could not flush buffer");
- let mut input = String::new();
- let read = stdin().read_line(&mut input).expect("failed to read line");
- // EOF
- if read == 0 || input.trim() == "quit" {
- break;
- }
- let num: usize = match input.trim().parse() {
- Ok(num) => num,
- Err(e) => {
- println!("error parsing integer: {}", e);
- continue;
- }
- };
- println!("fibonacci of {} is {}", num, fib(num));
- }
- }
- fn fib(n: usize) -> u64 {
- CACHE.lock().unwrap().reserve(n);
- if CACHE.lock().unwrap().len() <= n {
- let result = match n {
- 0 => 1,
- 1 => 1,
- _ => fib(n - 1) + fib(n - 2)
- };
- CACHE.lock().unwrap().push(result);
- }
- return CACHE.lock().unwrap()[n];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement