尾部调用优化是否适用于除递归调用之外的调用?

时间:2015-07-06 09:29:18

标签: algorithm tail-recursion tail-call-optimization

请帮助纠正我的理解,即尾部调用优化仅适用于递归调用。让我感到困惑的是,这个词只是"尾调用优化"而不是"递归尾调用优化"。

或者是否有一些其他优化通常发生在尾部调用中,这个术语指的是?

1 个答案:

答案 0 :(得分:3)

这将依赖于实现,并且依赖于编译器 - 但事实是,它可以用于任何尾调用,而不仅仅是递归调用。

对任何递归调用都可以轻松地内联方法,即使它不是方法本身。

它的一个特殊好处是相互递归调用:

f(n):
   //some code
   g(n)
g(n):
   //some more code
   f(n-1)

问题是“什么以及如何优化”,我们应该“取消”g,并使f递归吗?

幸运的是,这个问题相对简单,并且可以通过简单的图算法解决,这要归功于如果每个方法都是一个节点 - 它最多只有一个传出边(单尾调用)。这意味着图形实际上是一系列链,它们在“最坏情况”下形成一个简单的循环(每个连接组件中的单个循环),这很容易处理。