Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.11 KB | None | 0 0
  1. use std::io::{stdin, stdout, Write};
  2.  
  3. struct CachedFib(Vec<u64>);
  4.  
  5. impl CachedFib {
  6.     fn fib(&mut self, n: usize) -> u64 {
  7.         self.0.reserve(n);
  8.         if self.0.len() <= n {
  9.             let result = match n {
  10.                 0 | 1 => 1,
  11.                 _ => self.fib(n - 1) + self.fib(n - 2),
  12.             };
  13.             self.0.push(result);
  14.             result
  15.         } else {
  16.             self.0[n]
  17.         }
  18.     }
  19. }
  20.  
  21. fn main() {
  22.     let mut fib = CachedFib(vec![1, 1]);
  23.     loop {
  24.         print!("Enter a positive integer: ");
  25.         stdout().flush().expect("could not flush buffer");
  26.  
  27.         let mut input = String::new();
  28.         let read = stdin().read_line(&mut input).expect("failed to read line");
  29.         // EOF
  30.         if read == 0 || input.trim() == "quit" {
  31.             break;
  32.         }
  33.  
  34.         let num: usize = match input.trim().parse() {
  35.             Ok(num) => num,
  36.             Err(e) => {
  37.                 println!("error parsing integer: {}", e);
  38.                 continue;
  39.             }
  40.         };
  41.  
  42.         println!("fibonacci of {} is {}", num, fib.fib(num));
  43.     }
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement