如何在Rust中实现递归?
大家好!我尝试在Rust中实现一个计算阶乘的递归函数,但遇到了一个意想不到的问题。我写了一个简单的代码:
fn factorial(n: u32) -> u32 {
if n == 0 {
1
} else {
n * factorial(n - 1)
}
}
fn main() {
println!("{}", factorial(5));
}代码可以编译并运行,但当尝试增加递归深度(例如 factorial(20000))时,程序因栈溢出而崩溃。我知道Rust没有尾递归优化,这是意料之中的。然而,我想了解当递归深度可能很大时,如何在Rust中正确实现递归。
我已经尝试过的方法:
- 使用带有循环的迭代方法(可行,但我想要递归)
- 尝试使用累加器编写尾递归:
fn factorial_tail(n: u32, acc: u32) -> u32 {
if n == 0 {
acc
} else {
factorial_tail(n - 1, n * acc)
}
}