所谓尾调用,就是一个函数返回另一个函数的返回值:
function f()
…
return g()
end
因为调用g()后,f()中不再执行任何代码,所以不需要保留f()的调用桟信息;Lua做了这样的优化,称为"尾调用消除",g()返回后,控制点直接返回到调用f()的地方。
尾调用不需要使用栈空间,因此尾调用递归的层次可以无限制。
这种优化对尾递归非常有益,通常递归意味着调用桟的不断增长,甚至可能造成堆栈溢出;而尾递归提供了优化条件,编译器可以优化掉调用桟。
所谓尾调用,就是一个函数返回另一个函数的返回值:
function f()
…
return g()
end
因为调用g()后,f()中不再执行任何代码,所以不需要保留f()的调用桟信息;Lua做了这样的优化,称为"尾调用消除",g()返回后,控制点直接返回到调用f()的地方。
尾调用不需要使用栈空间,因此尾调用递归的层次可以无限制。
这种优化对尾递归非常有益,通常递归意味着调用桟的不断增长,甚至可能造成堆栈溢出;而尾递归提供了优化条件,编译器可以优化掉调用桟。