Appearance
4.5 函数递归调用
Rust 允许函数递归调用。所谓递归调用,指的是函数直接或者间接调用自己。下面用经典的 Fibonacci 数列来举例:
rust
fn fib(index: u32) -> u64 {
if index == 1 || index == 2 {
1
} else {
fib(index - 1) + fib(index - 2)
}
}
fn main() {
let f8 = fib(8);
println!("{}", f8);
}
这个 fib 函数就是典型的递归调用函数,因为在它的函数体内又调用了它自己。
谈到递归调用,许多读者都会自然联想到“尾递归优化”这个概念。可惜的是,当前版本的 Rust 暂时还不支持尾递归优化,因此如果递归调用层次太多的话,是有可能撑爆栈空间的。不过这个问题已经在设计讨论之中,各位读者可以从最新的 RFC 项目中了解进度。