Tail递归中的局部变量?

时间:2013-07-16 05:31:15

标签: algorithm data-structures recursion tail-recursion

我一直在阅读很多关于尾递归的文章。但是我还不清楚尾递归如何不使用堆栈空间。

局部变量和函数参数怎么样?它们也存储在堆栈中。在尾递归的情况下会发生什么?它与正常递归有什么不同。

“尾部调用[tail recursion]是一种打扮成电话的goto”

这究竟意味着什么?

1 个答案:

答案 0 :(得分:3)

遗忘了局部变量。尾调用递归的全部意义在于它是函数中最后发生的事情,因此调用后局部变量无关紧要。事实上,没有一个“跟注之后”是尾调用优化的全部内容。

编辑:关于报价:

在尾部调用优化的场景中,这两个是等效的:

fn(x) {
  ....
  fn(y);
}

fn(x) {
  start:
  ....
  x = y;
  goto start;
}