これら2つの再帰的な戦略の違いを取得しようとしています。
私に言われた定義は次のとおりです。
Tail Recursion:呼び出しが戻った後に何もする必要がない場合、つまり呼び出しが戻ると、呼び出した関数から戻り値がすぐに返されます
Head Recursion:関数の最初のステートメントが再帰呼び出しである場合、呼び出しはヘッド再帰です。
head recursion
では、再帰呼び出しが発生した場合、関数内の他の処理の前に再帰呼び出しが行われます(関数の先頭または先頭で発生すると考えてください)。
tail recursion
では、逆です。再帰呼び出しの前に処理が行われます。 2つの再帰的なスタイルを選択することは任意のように思えるかもしれませんが、選択することですべての違いが生まれます。
パスの先頭に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
。