尾调用优化
尾调用是指一个函数里的最后一个动作是一个函数调用的情形:即这个调用的返回值直接被当前函数返回。我们知道在函数调用时,会在内存中生成一个调用记录,即调用帧(call frame
),用于保存调用位置和内部变量等信息。而尾调用由于是函数的最后一步操作,所以可以不在调用栈上添加一个新的调用帧,而是直接更新外层函数的调用帧,这种处理方式即尾调用优化(Tail Call Optimization, TCO
)。
尾递归也是一种尾调用,通过TCO
,可以使原本 O(n)
的调用栈空间只需要 O(1)
。
一些语言会针对尾递归做一些优化,但Swift
不确保在所有情况下都做了优化。
参考