Java 再帰
Java 再帰
このチュートリアルでは、Java の再帰関数とその長所と短所について学びます。
Java では、自分自身を呼び出すメソッドを再帰メソッドと呼びます。そして、このプロセスは再帰として知られています。
物理的な世界の例は、2 つの平行なミラーを互いに向かい合わせに配置することです。それらの間にあるオブジェクトは再帰的に反映されます。
再帰の仕組み
<図>
上記の例では、recurse()
を呼び出しています。 main
内のメソッド 方法。 (通常のメソッド呼び出し)。そして、recurse() メソッド内で、同じ recurse メソッドを再度呼び出しています。これは再帰呼び出しです。
再帰呼び出しを停止するには、メソッド内でいくつかの条件を提供する必要があります。それ以外の場合、メソッドは無限に呼び出されます。
したがって、if...else ステートメント (または同様のアプローチ) を使用して、メソッド内の再帰呼び出しを終了します。
例:再帰を使用した数値の階乗
class Factorial {
static int factorial( int n ) {
if (n != 0) // termination condition
return n * factorial(n-1); // recursive call
else
return 1;
}
public static void main(String[] args) {
int number = 4, result;
result = factorial(number);
System.out.println(number + " factorial = " + result);
}
}
出力 :
4 factorial = 24
上記の例では、factorial()
という名前のメソッドがあります。 . factorial()
main()
から呼び出されます 方法。 番号で 変数が引数として渡されます。
ここで、ステートメントに注目してください。
return n * factorial(n-1);
factorial()
メソッドは自分自身を呼び出しています。最初、n の値は factorial()
内の 4 です。 .次の再帰呼び出し中に、3 が factorial()
に渡されます。 方法。このプロセスは n まで続きます は 0 です。
nの場合 0、if
に等しい ステートメントは false を返すため、1 が返されます。最後に、累積された結果が main()
に渡されます メソッド。
階乗計画の働き
下の画像は、階乗プログラムが再帰を使用してどのように実行されるかをよく示しています。
<図>再帰の利点と欠点
再帰呼び出しが行われると、変数の新しい格納場所がスタックに割り当てられます。各再帰呼び出しが戻ると、古い変数とパラメーターがスタックから削除されます。したがって、再帰は通常、より多くのメモリを使用し、一般的に低速です。
一方、再帰的なソリューションははるかに単純で、記述、デバッグ、および保守にかかる時間が短縮されます。
推奨読書:再帰の長所と短所は何ですか?
Java