尾递归调用时的函数调用栈。
在等待函数返回值的同时,需要再次调用下一层函数,只有返回时才能完成计算任务。因此,在函数调用栈中需要保存每次调用时新建的战争,直到下一层函数返回值确定后才能释放。因此,当地规调用层数较多时,占用空间会较大,容易导致占空间溢出。伪地规方法可以降低地规调用的占空间需求。伪地规函数的调用顺序如下。在调用该函数时,创建的战争如下。假地规函数的调用顺序如下。通常,后面创建的战争如下。这个例子表明,伪地规函数在地规调用前已经计算完毕,并将当前层地规调用的计算结果保存在第二个参数中,传递给下一层地规调用。因此,在回归阶段,地规调用无需进行任何操作,也无需进行任何计算,因为最终计算结果已经保存在函数参数中。尾地规函数在地规返回时,在天正中没有其他事情可以做,因此也不需要保存当前值。下一层地规函数不需要再创建一个新的战争,只需覆盖原来的战争即可。这样,地规所使用的占空间就不会因地规深度的增加而增加,而且最终计算结果已保存在函数的第二个参数中,在回归阶段也没有其他事情可做。因此,当满足地规调用的终止条件时,可以直接返回第二个参数的值,也就是最终计算结果,给主函数。这就像接力赛中的接力棒传递。当接力棒传递到最后一个人手中时,比赛就结束了。