尾调用优化:一种编译器或解释器的优化技术;当函数在返回前做的最后一件事是调用另一个函数(或自身)时,运行时可以复用当前调用栈帧,从而让某些递归在空间上表现得像循环,减少甚至避免栈溢出。(常缩写为 TCO)
注:在一些语言与实现中,TCO 是否发生取决于编译器/运行时设置与代码写法。
A tail-call optimized function can recurse without growing the stack.
经过尾调用优化的函数可以递归执行而不会让调用栈不断增长。
With tail-call optimization enabled, the compiler turns many tail-recursive helpers into efficient loops, improving performance and preventing stack overflows in deep recursion.
启用尾调用优化后,编译器会把许多尾递归辅助函数转成高效的循环,从而提升性能,并在深度递归时避免栈溢出。
/ˈteɪl kɔːl ˌɑːptɪməˈzeɪʃən/
该术语由三部分构成:tail(“尾部、末尾”)+ call(“调用”)+ optimization(“优化”)。含义直观:当一次函数调用出现在函数执行的“末尾位置”(即返回前的最后一步)时,系统可以进行“优化”,把新的调用复用为当前调用,减少额外栈帧的分配。该概念在函数式编程与编译器理论中尤为常见。