summaryrefslogtreecommitdiff
path: root/rust/theBook/chapter-3-variables-and-mutability/practice/fibonacci/src/main.rs
diff options
context:
space:
mode:
authorgarhve <git@garhve.com>2022-12-22 18:03:28 +0800
committergarhve <git@garhve.com>2022-12-22 18:03:28 +0800
commit36920adbaa85bd1be5ad37d7a22212231179930f (patch)
tree4cdc0aaaff479b6f41b39d68e7ba49d53867b096 /rust/theBook/chapter-3-variables-and-mutability/practice/fibonacci/src/main.rs
parentb5aa889f7fced8ba2cc1698ae9696d7bd0ca8ab5 (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.rs67
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
+}