0

末尾再帰に関する多くの記事を読んできましたが、末尾再帰がスタック領域を使用しない方法についてはまだ不明です。

ローカル変数と関数の引数はどうですか? それらはスタックにも格納されます。末尾再帰の場合、これらはどうなりますか? 通常の再帰とどう違うのですか。

「テールコール[テール再帰]は、コールに扮した後藤の一種です」

これはどういう意味ですか?

4

1 に答える 1

3

ローカル変数は忘れられます。末尾呼び出し再帰の全体的なポイントは、それが関数内で発生する最後のことであるため、呼び出し後にローカル変数は問題にならないということです。実際、「コールの後」がないことが、テールコールの最適化のすべてです。

編集:引用について:

末尾呼び出しが最適化されたシナリオでは、これら 2 つは同等です。

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

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