Skip to content

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 项目中了解进度。

Released under the MIT License