Merge pull request #163 from lamalex/recursion-in-rust

Add rust examples to 03_recursion
This commit is contained in:
Aditya Bhargava
2020-09-14 10:55:42 -05:00
committed by GitHub
9 changed files with 111 additions and 0 deletions

View File

@@ -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

View File

@@ -0,0 +1,10 @@
[package]
name = "countdown"
version = "0.1.0"
authors = ["Alexander Launi <alex.launi@gmail.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
num-traits = "0.2"

View File

@@ -0,0 +1,17 @@
use std::ops::Sub;
use std::fmt::Display;
use num_traits::identities::One;
use num_traits::identities::Zero;
fn countdown<T: Display + One + Zero + Sub<Output = T>>(i: T) {
println!("{}", i);
if i.is_zero() {
return
}
countdown(i - T::one());
}
fn main() {
countdown(5);
}

10
03_recursion/rust/02_greet/.gitignore vendored Normal file
View File

@@ -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

View File

@@ -0,0 +1,9 @@
[package]
name = "greet"
version = "0.1.0"
authors = ["Alexander Launi <alex.launi@gmail.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

View File

@@ -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");
}

View File

@@ -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

View File

@@ -0,0 +1,10 @@
[package]
name = "factorial"
version = "0.1.0"
authors = ["Alexander Launi <alex.launi@gmail.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
num-traits = "0.2"

View File

@@ -0,0 +1,17 @@
use std::ops::Sub;
use std::fmt::Display;
use num_traits::identities::One;
fn fact<T: PartialOrd + PartialEq + One + Sub<Output = T> + Copy + Display>(x: T) -> T {
if x < T::one() {
panic!("Invalid number: {}", x);
} else if x.is_one() {
return T::one();
}
return x * fact(x - T::one());
}
fn main() {
println!("{}", fact(3));
}