末尾再帰とは
末尾再帰は、メソッドがそれ自体を呼び出し、すぐにその2番目の呼び出しの値を返すプログラミングメソッド呼び出しの一種です。 つまり、メソッド内の最後のステートメントが同じメソッドの別の呼び出しである場合、末尾再帰が発生します。 通常、2番目のメソッド呼び出しのパラメーターは最初のメソッドのパラメーターとは異なりますが、これは必須ではありません。 この再帰が機能するためには、内部で呼び出されるメソッドは、数値、文字列、その他のオブジェクトなどの具体的な値を返す必要があります。 値を返さないVoidメソッドは、再帰ではうまく機能しません。
再帰呼び出しが呼び出しメソッドの最後のステートメントでなければならないという要件は、再帰呼び出しがメソッドの最後の行であることを必ずしも意味しません。 適切な末尾再帰呼び出しは、制御構造内でも見つけることができます。つまり、ソースコードでは、制御構造が呼び出しではなくメソッドを終了する場合があります。 この場合の重要な違いは、制御構造がプログラミングステートメントではなく、コンピューター言語の組み込み部分であることです。
末尾再帰は、JavaやC ++など、多くのコンピューター言語に存在します。 多くの場合、これらの再帰呼び出しは、forループ、whileループ、gotoステートメントなどの他の手段を使用して書き換えることができます。 再帰のユーティリティは、同じメソッドへの多数の順次呼び出しを作成するときに見つかります。 多くの場合、再帰は反復タスクを達成するための最もクリーンで簡単な方法です。
末尾再帰の一般的な例は、数値の階乗を計算する方法です。 このプロセスは、任意の数から始めて、すべての数が乗算される前に理想的です。 したがって、5の階乗を見つけるには、5 * 4 * 3 * 2 * 1を掛けることが適切なプロセスです。 再帰は、階乗法の構造が原因で発生します。階乗が1の場合、1を返します。それ以外の場合は、メソッドに指定された数から1を引いた階乗を返します。 このメソッドは、最後のメソッド呼び出しの前後に制御ステートメントを使用してもしなくても、どちらかのタイプの末尾再帰を使用して同等に記述できるため、便利です。
末尾再帰は、複数の種類の再帰のほんの一例です。 すべてのタイプの再帰の概念は本質的に同じであり、何らかの方法でメソッドがそれ自体を呼び出します。 これらのタイプのうち、末尾再帰の違いは、再帰呼び出しの値がすぐに返されることであり、呼び出し後の呼び出しメソッドでは他に何も起こりません。