From 3af00d00d7ba1c2ce5a07036fc397f203b0355f5 Mon Sep 17 00:00:00 2001 From: Night Cruising <77157236+night-cruise@users.noreply.github.com> Date: Sat, 2 Sep 2023 16:08:52 +0800 Subject: [PATCH] feat: add rust codes for chapter computational complexity (#714) --- codes/rust/Cargo.toml | 10 +++ .../iteration.rs | 73 +++++++++++++++++++ .../recursion.rs | 55 ++++++++++++++ codes/rust/chapter_tree/binary_search_tree.rs | 2 +- 4 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 codes/rust/chapter_computational_complexity/iteration.rs create mode 100644 codes/rust/chapter_computational_complexity/recursion.rs diff --git a/codes/rust/Cargo.toml b/codes/rust/Cargo.toml index c2978fde0..3db952084 100644 --- a/codes/rust/Cargo.toml +++ b/codes/rust/Cargo.toml @@ -19,6 +19,16 @@ path = "chapter_computational_complexity/worst_best_time_complexity.rs" name = "space_complexity" path = "chapter_computational_complexity/space_complexity.rs" +# Run Command: cargo run --bin iteration +[[bin]] +name = "iteration" +path = "chapter_computational_complexity/iteration.rs" + +# Run Command: cargo run --bin recursion +[[bin]] +name = "recursion" +path = "chapter_computational_complexity/recursion.rs" + # Run Command: cargo run --bin two_sum [[bin]] name = "two_sum" diff --git a/codes/rust/chapter_computational_complexity/iteration.rs b/codes/rust/chapter_computational_complexity/iteration.rs new file mode 100644 index 000000000..7f2b7d936 --- /dev/null +++ b/codes/rust/chapter_computational_complexity/iteration.rs @@ -0,0 +1,73 @@ +/* + * File: iteration.rs + * Created Time: 2023-09-02 + * Author: night-cruise (2586447362@qq.com) + */ + + +/* for 循环 */ +fn for_loop(n: i32) -> i32 { + let mut res = 0; + // 循环求和 1, 2, ..., n-1, n + for i in 1..=n { + res += i; + } + res +} + +/* while 循环 */ +fn while_loop(n: i32) -> i32 { + let mut res = 0; + let mut i = 1; // 初始化条件变量 + // 循环求和 1, 2, ..., n-1, n + while i <= n { + res += i; + i += 1; // 更新条件变量 + } + res +} + +/* while 循环(两次更新) */ +fn while_loop_ii(n: i32) -> i32 { + let mut res = 0; + let mut i = 1; // 初始化条件变量 + // 循环求和 1, 4, ... + while i <= n { + res += i; + // 更新条件变量 + i += 1; + i *= 2; + } + res +} + +/* 双层 for 循环 */ +fn nested_for_loop(n: i32) -> String { + let mut res = vec![]; + // 循环 i = 1, 2, ..., n-1, n + for i in 1..=n { + // 循环 j = 1, 2, ..., n-1, n + for j in 1..=n { + res.push(format!("({}, {}), ", i, j)); + } + } + res.join("") +} + +/* Driver Code */ +fn main() { + let n = 5; + let mut res; + + res = for_loop(n); + println!("\nfor 循环的求和结果 res = {res}"); + + res = while_loop(n); + println!("\nwhile 循环的求和结果 res = {res}"); + + res = while_loop_ii(n); + println!("\nwhile 循环(两次更新)求和结果 res = {}", res); + + let res = nested_for_loop(n); + println!("\n双层 for 循环的遍历结果 {res}"); +} \ No newline at end of file diff --git a/codes/rust/chapter_computational_complexity/recursion.rs b/codes/rust/chapter_computational_complexity/recursion.rs new file mode 100644 index 000000000..d8c2a8d7f --- /dev/null +++ b/codes/rust/chapter_computational_complexity/recursion.rs @@ -0,0 +1,55 @@ +/* + * File: recursion.rs + * Created Time: 2023-09-02 + * Author: night-cruise (2586447362@qq.com) + */ + + +/* 递归 */ +fn recur(n: i32) -> i32 { + // 终止条件 + if n == 1 { + return 1; + } + // 递:递归调用 + let res = recur(n - 1); + // 归:返回结果 + n + res +} + +/* 尾递归 */ +fn tail_recur(n: i32, res: i32) -> i32 { + // 终止条件 + if n == 0 { + return res; + } + // 尾递归调用 + tail_recur(n - 1, res + n) +} + +/* 斐波那契数列:递归 */ +fn fib(n: i32) -> i32 { + // 终止条件 f(1) = 0, f(2) = 1 + if n == 1 || n == 2 { + return n - 1; + } + // 递归调用 f(n) = f(n-1) + f(n-2) + let res = fib(n - 1) + fib(n - 2); + // 返回结果 + res +} + +/* Driver Code */ +fn main() { + let n = 5; + let mut res; + + res = recur(n); + println!("\n递归函数的求和结果 res = {res}"); + + res = tail_recur(n, 0); + println!("\n尾递归函数的求和结果 res = {res}"); + + res = fib(n); + println!("\n斐波那契数列的第 {n} 项为 {res}"); +} \ No newline at end of file diff --git a/codes/rust/chapter_tree/binary_search_tree.rs b/codes/rust/chapter_tree/binary_search_tree.rs index 1ed22a3e0..e6a1e7dd6 100644 --- a/codes/rust/chapter_tree/binary_search_tree.rs +++ b/codes/rust/chapter_tree/binary_search_tree.rs @@ -76,7 +76,7 @@ impl BinarySearchTree { pub fn insert(&mut self, num: i32) { // 若树为空,则初始化根节点 if self.root.is_none() { - self.root = TreeNode::new(num); + self.root = Some(TreeNode::new(num)); return; } let mut cur = self.root.clone();