Skip to content

尾调用优化(Tail Call Optimization)

尾调用优化(TCO)是一种编译器/运行时优化:当函数的最后一步是调用另一个函数时,可以复用当前栈帧,避免栈增长。

什么是“尾调用”

javascript
function f(x) {
    return g(x); // 最后一步是调用 g
}

因为 f 的工作已经完成,所以理论上可以直接把控制权交给 g,不必保留 f 的栈帧。

为什么重要

  • 递归可以像循环一样节省栈空间。
  • 能避免深度递归导致的栈溢出。

JavaScript 的现实情况

ECMAScript 曾经规范化过 TCO,但多数运行时并未开启,所以在 JS 中不能依赖它。

因此,实际工程里深递归往往需要改写成循环或显式栈。

进一步阅读

理解 TCO 有助于你判断“递归是否安全”。

CC-BY 4.0 Licensed