1. ホーム
  2. java

[解決済み] ヘッドリカーシオンとテールリカーシオンの違い [重複]について

2022-02-26 09:04:03

質問

この2つの再帰的戦略の違いを知りたいのです。

私が教えてもらった定義は以下の通りです。

テールリカーシオン。 呼び出しが返された後に何もする必要がない場合、つまり呼び出しが返されたときに戻り値が呼び出し元の関数から直ちに返される場合、呼び出しは末尾再帰的である。

ヘッド・リカーシオン。 関数の最初のステートメントが再帰的呼び出しである場合、呼び出しは頭部再帰的である。

どのように解決するのですか?

head recursion 再帰呼び出しが発生した場合、関数内の他の処理よりも先に実行されます(関数の先頭で実行されると考えてください)。

tail recursion これは逆で、再帰呼び出しの前に処理が行われる。2つの再帰的スタイルのどちらを選ぶかは任意に思えるかもしれないが、その選択によってすべての違いが生じる可能性がある。

パスの先頭に1つの再帰呼び出しを持つパスの関数は、頭再帰と呼ばれるものを使用します。前の展示の階乗関数は、頭部再帰を使用しています。再帰が必要だと判断したときに最初に行うのは、デクリメントされたパラメータを持つ自分自身を呼び出すことです。 パスの末尾に1回だけ再帰呼び出しを行う関数は、末尾再帰を使用している。 この記事を参照する

再帰の例:

public void tail(int n)         |     public void head(int n)
{                               |     {
    if(n == 1)                  |         if(n == 0)
        return;                 |             return;
    else                        |         else
        System.out.println(n);  |             head(n-1);
                                |
    tail(n-1);                  |         System.out.println(n);
}                               |     }

再帰呼び出しがメソッドの末尾に発生した場合、それは tail recursion . 末尾再帰は similar to a loop . その method executes all the statements before jumping into the next recursive call .

で再帰呼び出しが発生した場合 beginning of a method, it is called a head recursion . その method saves the state before jumping into the next recursive call .