From 858e1e71e77b42e8b21a537b27c619bc0b99e21d Mon Sep 17 00:00:00 2001 From: Alexander Launi Date: Sat, 21 Mar 2020 16:08:56 -0400 Subject: [PATCH 1/6] Add recursive countdown example in Rust --- 03_recursion/rust/01_countdown/.gitignore | 10 ++++++++++ 03_recursion/rust/01_countdown/Cargo.toml | 9 +++++++++ 03_recursion/rust/01_countdown/src/main.rs | 12 ++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 03_recursion/rust/01_countdown/.gitignore create mode 100644 03_recursion/rust/01_countdown/Cargo.toml create mode 100644 03_recursion/rust/01_countdown/src/main.rs diff --git a/03_recursion/rust/01_countdown/.gitignore b/03_recursion/rust/01_countdown/.gitignore new file mode 100644 index 0000000..088ba6b --- /dev/null +++ b/03_recursion/rust/01_countdown/.gitignore @@ -0,0 +1,10 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk diff --git a/03_recursion/rust/01_countdown/Cargo.toml b/03_recursion/rust/01_countdown/Cargo.toml new file mode 100644 index 0000000..076bdcd --- /dev/null +++ b/03_recursion/rust/01_countdown/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "countdown" +version = "0.1.0" +authors = ["Alexander Launi "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/03_recursion/rust/01_countdown/src/main.rs b/03_recursion/rust/01_countdown/src/main.rs new file mode 100644 index 0000000..2fdb117 --- /dev/null +++ b/03_recursion/rust/01_countdown/src/main.rs @@ -0,0 +1,12 @@ +fn countdown(i: u32) { + println!("{}", i); + if i == 0 { + return + } + + countdown(i - 1); +} + +fn main() { + countdown(5); +} From 64e231a8c60478b04bffa66eae1fe513cf4b5f73 Mon Sep 17 00:00:00 2001 From: Alexander Launi Date: Sat, 21 Mar 2020 16:16:22 -0400 Subject: [PATCH 2/6] Add greet example in Rust --- 03_recursion/rust/02_greet/.gitignore | 10 ++++++++++ 03_recursion/rust/02_greet/Cargo.toml | 9 +++++++++ 03_recursion/rust/02_greet/src/main.rs | 18 ++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 03_recursion/rust/02_greet/.gitignore create mode 100644 03_recursion/rust/02_greet/Cargo.toml create mode 100644 03_recursion/rust/02_greet/src/main.rs diff --git a/03_recursion/rust/02_greet/.gitignore b/03_recursion/rust/02_greet/.gitignore new file mode 100644 index 0000000..088ba6b --- /dev/null +++ b/03_recursion/rust/02_greet/.gitignore @@ -0,0 +1,10 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk diff --git a/03_recursion/rust/02_greet/Cargo.toml b/03_recursion/rust/02_greet/Cargo.toml new file mode 100644 index 0000000..98268b0 --- /dev/null +++ b/03_recursion/rust/02_greet/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "greet" +version = "0.1.0" +authors = ["Alexander Launi "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/03_recursion/rust/02_greet/src/main.rs b/03_recursion/rust/02_greet/src/main.rs new file mode 100644 index 0000000..8f90eb0 --- /dev/null +++ b/03_recursion/rust/02_greet/src/main.rs @@ -0,0 +1,18 @@ +fn greet2(name: &str) { + println!("how are you {}?", name); +} + +fn bye() { + println!("ok bye!"); +} + +fn greet(name: &str) { + println!("hello {}!", name); + greet2(name); + println!("getting ready to say bye..."); + bye(); +} + +fn main() { + greet("adit"); +} From 2aa26293b0cf9242e0bde5850ef80f00d8bf35ab Mon Sep 17 00:00:00 2001 From: Alexander Launi Date: Sat, 21 Mar 2020 16:20:51 -0400 Subject: [PATCH 3/6] Add factorial examples in Rust --- 03_recursion/rust/03_factorial/.gitignore | 10 ++++++++++ 03_recursion/rust/03_factorial/Cargo.toml | 9 +++++++++ 03_recursion/rust/03_factorial/src/main.rs | 11 +++++++++++ 3 files changed, 30 insertions(+) create mode 100644 03_recursion/rust/03_factorial/.gitignore create mode 100644 03_recursion/rust/03_factorial/Cargo.toml create mode 100644 03_recursion/rust/03_factorial/src/main.rs diff --git a/03_recursion/rust/03_factorial/.gitignore b/03_recursion/rust/03_factorial/.gitignore new file mode 100644 index 0000000..088ba6b --- /dev/null +++ b/03_recursion/rust/03_factorial/.gitignore @@ -0,0 +1,10 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk diff --git a/03_recursion/rust/03_factorial/Cargo.toml b/03_recursion/rust/03_factorial/Cargo.toml new file mode 100644 index 0000000..cec2d7e --- /dev/null +++ b/03_recursion/rust/03_factorial/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "factorial" +version = "0.1.0" +authors = ["Alexander Launi "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/03_recursion/rust/03_factorial/src/main.rs b/03_recursion/rust/03_factorial/src/main.rs new file mode 100644 index 0000000..b9c7425 --- /dev/null +++ b/03_recursion/rust/03_factorial/src/main.rs @@ -0,0 +1,11 @@ +fn fact(x: u32) -> u32 { + if x == 1 { + return 1; + } + + return x * fact(x - 1); +} + +fn main() { + println!("{}", fact(3)); +} \ No newline at end of file From 2ff4f42d43c26671fe8fb22366122d8f722f2864 Mon Sep 17 00:00:00 2001 From: Alexander Launi Date: Sat, 21 Mar 2020 16:41:02 -0400 Subject: [PATCH 4/6] Implement countdown using generic mathematics --- 03_recursion/rust/01_countdown/Cargo.toml | 1 + 03_recursion/rust/01_countdown/src/main.rs | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/03_recursion/rust/01_countdown/Cargo.toml b/03_recursion/rust/01_countdown/Cargo.toml index 076bdcd..9d582e3 100644 --- a/03_recursion/rust/01_countdown/Cargo.toml +++ b/03_recursion/rust/01_countdown/Cargo.toml @@ -7,3 +7,4 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +num-traits = "0.2" \ No newline at end of file diff --git a/03_recursion/rust/01_countdown/src/main.rs b/03_recursion/rust/01_countdown/src/main.rs index 2fdb117..84ae0e7 100644 --- a/03_recursion/rust/01_countdown/src/main.rs +++ b/03_recursion/rust/01_countdown/src/main.rs @@ -1,10 +1,15 @@ -fn countdown(i: u32) { +use std::ops::Sub; +use std::fmt::Display; +use num_traits::identities::One; +use num_traits::identities::Zero; + +fn countdown>(i: T) { println!("{}", i); - if i == 0 { + if i.is_zero() { return } - countdown(i - 1); + countdown(i - T::one()); } fn main() { From 24c91a4a0b987a6889f6803e5390b79c4762418b Mon Sep 17 00:00:00 2001 From: Alexander Launi Date: Sat, 21 Mar 2020 17:20:03 -0400 Subject: [PATCH 5/6] Implement factorial using generic mathematics --- 03_recursion/rust/03_factorial/Cargo.toml | 1 + 03_recursion/rust/03_factorial/src/main.rs | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/03_recursion/rust/03_factorial/Cargo.toml b/03_recursion/rust/03_factorial/Cargo.toml index cec2d7e..223a6ec 100644 --- a/03_recursion/rust/03_factorial/Cargo.toml +++ b/03_recursion/rust/03_factorial/Cargo.toml @@ -7,3 +7,4 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +num-traits = "0.2" diff --git a/03_recursion/rust/03_factorial/src/main.rs b/03_recursion/rust/03_factorial/src/main.rs index b9c7425..5ebd5b2 100644 --- a/03_recursion/rust/03_factorial/src/main.rs +++ b/03_recursion/rust/03_factorial/src/main.rs @@ -1,9 +1,17 @@ -fn fact(x: u32) -> u32 { - if x == 1 { - return 1; +use std::ops::Sub; +use std::fmt::Display; +use num_traits::identities::One; + +fn fact + Copy + Display>(x: T) -> T { + if x < T::one() { + panic!("Invalid number: {}", x); } - return x * fact(x - 1); + if x.is_one() { + return T::one(); + } + + return x * fact(x - T::one()); } fn main() { From 16a4ae12f6e86e95836d2178ef832e269db144a2 Mon Sep 17 00:00:00 2001 From: Alexander Launi Date: Sat, 21 Mar 2020 18:30:37 -0400 Subject: [PATCH 6/6] Small syntax change in 03_factorial --- 03_recursion/rust/03_factorial/src/main.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/03_recursion/rust/03_factorial/src/main.rs b/03_recursion/rust/03_factorial/src/main.rs index 5ebd5b2..3c77465 100644 --- a/03_recursion/rust/03_factorial/src/main.rs +++ b/03_recursion/rust/03_factorial/src/main.rs @@ -5,9 +5,7 @@ use num_traits::identities::One; fn fact + Copy + Display>(x: T) -> T { if x < T::one() { panic!("Invalid number: {}", x); - } - - if x.is_one() { + } else if x.is_one() { return T::one(); }