递归 (Recursion)

Zig 语言支持函数递归,即函数调用自身。

基本概念

递归是一种强大的编程技术,通常用于解决可以分解为相同子问题的任务,例如遍历树结构、计算阶乘等。

fn factorial(n: u64) u64 {
    if (n == 0) {
        return 1;
    }
    return n * factorial(n - 1);
}

堆栈溢出 (Stack Overflow)

递归函数会使用调用堆栈。如果递归深度过大,可能会导致堆栈溢出错误,从而使程序崩溃。

Zig 编译器通常不会对递归函数进行尾调用优化(Tail Call Optimization),所以需要特别注意递归深度。

替代方案

对于可能导致深度递归的问题,通常有迭代(Iteration)的替代方案。

另请参阅: