feat: add for-loop-recur rust codes (#803)

This commit is contained in:
易春风 2023-09-29 12:17:05 +08:00 committed by GitHub
parent 79ee529b47
commit 5b692968a9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -17,6 +17,25 @@ fn recur(n: i32) -> i32 {
n + res
}
/* 使用迭代模拟递归 */
fn for_loop_recur(n: i32) -> i32 {
// 使用一个显式的栈来模拟系统调用栈
let mut stack = Vec::new();
let mut res = 0;
// 递:递归调用
for i in (1..=n).rev() {
// 通过“入栈操作”模拟“递”
stack.push(i);
}
// 归:返回结果
while !stack.is_empty() {
// 通过“出栈操作”模拟“归”
res += stack.pop().unwrap();
}
// res = 1+2+3+...+n
res
}
/* 尾递归 */
fn tail_recur(n: i32, res: i32) -> i32 {
// 终止条件
@ -47,6 +66,9 @@ fn main() {
res = recur(n);
println!("\n递归函数的求和结果 res = {res}");
res = for_loop_recur(n);
println!("\n使用迭代模拟递归求和结果 res = {res}");
res = tail_recur(n, 0);
println!("\n尾递归函数的求和结果 res = {res}");