小智 5
a呼叫b呼叫c呼叫d.
最后你有尾巴:
d返回c返回b返回a.如果所有这些都不做任何事情(例如在递归中,它实际上是一个调用一个调用一个调用一个),那么你可以优化那个... ...到d返回一个.
尾递归并不意味着您将递归调用转换为循环.
这意味着在递归调用时不再需要堆栈帧,因此可以消除堆栈帧.如果重新调用是方法中的最后一个语句,并且递归调用的返回值是当前方法的返回值,则会发生这种情况.通过消除当前堆栈帧,递归调用可以在没有堆栈溢出错误的情况下进入任意深度并且可以节省大量资源.
这种优化通常由编译器/解释器而不是程序员完成.