English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 基础教程

Java フローコントロール

Java 配列

Java 面向オブジェクト(I)

Java 面向オブジェクト(II)

Java 面向オブジェクト(III)

Java 例外処理

Java リスト(List)

Java キュー(キュー)

Java Mapコレクション

Java Setコレクション

Java 入出力(I/O)

Java Reader/Writer

Java その他のトピック

Java 再帰

このチュートリアルでは、Javaの再帰関数とその長所、短所について学びます。

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()メソッドに渡します。

階乗プログラムのワークフロー

以下の図は、再帰を使用して階乗プログラムを実行する方法をよりよく理解するのに役立ちます。

再帰を使用する階乗プログラム

再帰の長所と短所

再帰呼び出しを行う際には、新しい変数のストレージ位置がスタック上に割り当てられます。各再帰呼び出しの戻りに伴い、古い変数とパラメータがスタックから削除されます。したがって、再帰は通常、より多くのメモリを使用し、通常、遅いです。

他方、再帰解決策は非常にシンプルで、書き込み、デバッグ、およびメンテナンスに時間がかかりません。