One of the things that always interests me about a new language is the creation of Fibonacci numbers. It’s a great way to practice a language. As such, since I am learning Rust, I made a Fibonacci number generator in rust. Here is the code, if you’re interested:
use std::io; fn main() { loop { println!("Enter the term that you want to generate!"); let mut term = String::new(); io::stdin().read_line(&mut term) .ok() .expect("Failed to read line!"); // convert string to int let term: usize = match term.trim().parse() { Ok(num) => num, Err(_) => { println!("Please enter a valid number!"); continue; } }; // Get the fib term let mut fib_number = get_fib_term_dynamic(term); println!("Dynamic Term number {} is {}",term, fib_number); fib_number = get_fib_term_recursive(term); println!("Recursive term number {} is {}", term, fib_number); } } fn get_fib_term_recursive(term: usize) -> u32 { match term { 0 => 0, 1 => 1, _ => get_fib_term_recursive(term-1) + get_fib_term_recursive(term-2), } } fn get_fib_term_dynamic(term: usize) -> u32 { let mut v = vec![0u32, 1]; for i in 2..(term+1) { let sum = v[i-1] + v[i-2]; v.push(sum); } return v[term]; } #[test] fn it_works() { assert!(get_fib_term_recursive(5) == 5); assert!(get_fib_term_recursive(6) == 8); assert!(get_fib_term_dynamic(5) == 5); assert!(get_fib_term_dynamic(6) == 8); }
You can also view the gist here
Of course, this code also serves as a great way to show that dynamic programming is a much better way to solve for Fibonacci terms.