English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
このチュートリアルでは、Javaの再帰関数とその長所、短所について学びます。
Javaでは、自身を呼び出すメソッド再帰メソッドと呼ばれます。そして、このプロセスは再帰と呼ばれます。
物理世界の例として、互いに対面している平行鏡を配置します。これらの鏡の間のどんな物体も再帰的に反射されます。
上記の例では、mainメソッド内部からrecurse()メソッドを呼び出しました。(通常のメソッド呼び出し)。さらに、recurse()メソッド内部で同じrecurseメソッドを再び呼び出しました。これは再帰呼び出しです。
再帰呼び出しを停止するために、方法内部にいくつかの条件を提供する必要があります。さもなければ、そのメソッドは無限に呼び出し続けます。
したがって、私たちは以下を使用しますif ... else文(または同様の方法)再帰呼び出し内部の再帰呼び出しを終了する方法。
class Factorial { static int factorial( int n ) { if (n != 0) // 終了条件 return n * factorial(n-1); //再帰呼び出し else return 1; } public static void main(String[] args) { int number = 4, result; result = factorial(number); System.out.println(number + " の階乗= " + result); } }
出力:
4 の階乗= 24
上記の例では、factorial()メソッドという名前のメソッドがあります。main()メソッドからfactorial()を呼び出します。渡される数字変数をパラメータとして使用します。
ここでは、以下の文に注意してください:
return n * factorial(n-1);
factorial()メソッドが自身を呼び出しています。最初に、factorial()内部のnの値は4次の再帰呼び出し中に、3factorial()メソッドに渡されます。このプロセスは、nが0に等しいまで続きます。
nが0に等しい場合、if文はfalseを返し、したがって1最後に、累積結果をmain()メソッドに渡します。
以下の図は、再帰を使用して階乗プログラムを実行する方法をよりよく理解するのに役立ちます。
再帰呼び出しを行う際には、新しい変数のストレージ位置がスタック上に割り当てられます。各再帰呼び出しの戻りに伴い、古い変数とパラメータがスタックから削除されます。したがって、再帰は通常、より多くのメモリを使用し、通常、遅いです。
他方、再帰解決策は非常にシンプルで、書き込み、デバッグ、およびメンテナンスに時間がかかりません。