请帮助纠正我的理解,即尾调用优化仅适用于递归调用。令我感到困惑的是,该术语只是“尾调用优化”,而不是“递归尾调用优化”。
还是该术语所指的一般情况下,针对尾部调用发生了其他优化?
那将依赖于实现,并且依赖于编译器-但事实是,它可以用于任何尾部调用,而不仅仅是递归调用。
内联方法可以很容易地对任何递归调用进行,即使不是方法本身。
这样做的一个特殊好处是可以进行相互递归调用:
f(n):
//some code
g(n)
g(n):
//some more code
f(n-1)
问题是“什么以及如何优化”,我们是否应该“取消” g,并使f递归?
幸运的是,这个问题相对简单,并且可以通过简单的图形算法解决,这要归功于以下事实:如果每种方法都是一个节点-它最多具有一个输出边缘(单尾调用)。这意味着该图实际上是一系列链,在“最坏情况”下形成一个简单的循环(每个连接的组件中的单个循环),该循环很容易处理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句