0

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

局部变量和函数参数呢?它们也存储在堆栈中。如果出现尾递归,这些会发生什么?它与普通递归有何不同。

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

这究竟意味着什么?

4

1 回答 1

3

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

编辑:关于报价:

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

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

fn(x) {
  start:
  ....
  x = y;
  goto start;
}
于 2013-07-16T05:33:21.297 回答