diff options
author | garhve <git@garhve.com> | 2022-12-22 18:03:28 +0800 |
---|---|---|
committer | garhve <git@garhve.com> | 2022-12-22 18:03:28 +0800 |
commit | 36920adbaa85bd1be5ad37d7a22212231179930f (patch) | |
tree | 4cdc0aaaff479b6f41b39d68e7ba49d53867b096 /rust/theBook/chapter-3-variables-and-mutability/practice/fibonacci/src/main.rs | |
parent | b5aa889f7fced8ba2cc1698ae9696d7bd0ca8ab5 (diff) |
finish chapter 3
Diffstat (limited to 'rust/theBook/chapter-3-variables-and-mutability/practice/fibonacci/src/main.rs')
-rw-r--r-- | rust/theBook/chapter-3-variables-and-mutability/practice/fibonacci/src/main.rs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/rust/theBook/chapter-3-variables-and-mutability/practice/fibonacci/src/main.rs b/rust/theBook/chapter-3-variables-and-mutability/practice/fibonacci/src/main.rs new file mode 100644 index 0000000..078f729 --- /dev/null +++ b/rust/theBook/chapter-3-variables-and-mutability/practice/fibonacci/src/main.rs @@ -0,0 +1,67 @@ +use std::io; +use std::process; + +fn main() { + println!("Print nth Fibonacci number!"); + println!(""); + + print_fibonacci(); + + println!("done!"); +} + +fn print_fibonacci() { + println!("Enter the n you want to print"); + + let fib = read_input(); + + println!("recursion_fibonacci:"); + println!("{}", recursion_fibonacci(fib)); + loop_fibonacci(fib); +} + +fn loop_fibonacci(x: i32) { + let mut num1 = 0; + let mut num2 = 1; + let mut next: i32; + + println!("loop_fibonacci:"); + + for _i in 0..x { + if _i <= 1 { + next = _i; + } else { + next = num1 + num2; + num1 = num2; + num2 = next; + } + println!("{next}"); + } +} + +// Not recommend in rust +fn recursion_fibonacci(x: i32) -> i32 { + if x <= 1 { + return x; + } else { + recursion_fibonacci(x-1) + recursion_fibonacci(x-2) + } +} + +fn read_input() -> i32 { + let mut inp = String::new(); + + io::stdin() + .read_line(&mut inp) + .expect("failed to read number"); + + let inp: i32 = match inp.trim().parse() { + Ok(inp) => inp, + Err(_) => { + println!("converting error"); + process::exit(1); + }, + }; + + inp +} |