Appearance
尾调用优化(Tail Call Optimization)
尾调用优化(TCO)是一种编译器/运行时优化:当函数的最后一步是调用另一个函数时,可以复用当前栈帧,避免栈增长。
什么是“尾调用”
javascript
function f(x) {
return g(x); // 最后一步是调用 g
}因为 f 的工作已经完成,所以理论上可以直接把控制权交给 g,不必保留 f 的栈帧。
为什么重要
- 递归可以像循环一样节省栈空间。
- 能避免深度递归导致的栈溢出。
JavaScript 的现实情况
ECMAScript 曾经规范化过 TCO,但多数运行时并未开启,所以在 JS 中不能依赖它。
因此,实际工程里深递归往往需要改写成循环或显式栈。
进一步阅读
理解 TCO 有助于你判断“递归是否安全”。