再帰 - recursion (Java 第2回)

はじめに

このページは大学のJavaの授業の予習の一環で書いている。
直感的な理解をメモしているだけなので、厳密な内容は避ける。
第2回は再帰である。

再帰とは

再帰とは、ある関数が関数内で自分自身を呼び出すこと。
より一般的には(プログラミングの文脈でない場合)、ある言葉の定義の中にその言葉自身が登場することである。
再帰を用いて、ソースコードを簡潔にできる場合がある。

再帰の解説

以下のコードは、階乗(factorial)の表示のメソッドと、階乗の計算のメソッドが含まれたコードである。

public class Recursion {
    public static void main(String[] args) {
        int number = 5;
        long factorial = Factorial(number);
        System.out.println("The factorial of " + number + " is " + factorial);
    }

    public static long Factorial(int n) {
        // Base case: if n is 0 or 1, the factorial is 1
        if (n == 0 || n == 1) {
            return 1;
        }
        // Recursive case: n! = n * (n-1)!
        else {
            return n * Factorial(n - 1);
        }
    }
}

最初にクラスを作成、そのクラス内でメソッドを作成している。
2番目のメソッド(階乗を計算するメソッド)では条件分岐で
Base Case: 再帰の終了(階乗だから0と1は1を返して終了)
Recursive Case: 再帰の実行
の2つのパートに分かれている。

疑問点

再帰とは関係ないけど、mainメソッドって特別な意味がありそう。」

mainメソッドは、プログラムの起動点(program entry point)になる。mainメソッドの特徴は、
- プログラムの実行はmainメソッドから開始される
- mainメソッドはクラス内の他のメソッドより先に実行される
- mainメソッドがないとプログラムを起動できない
- mainメソッドの記述形式は固定されている(public static void main(String[] args))

また、mainメソッドを持つクラスの役割として、
- 起動時の設定や前処理を行う
- 他のクラスのインスタンスを生成する
- 画面表示やハードウェアとのやり取りを初期化する
- アプリケーション終了時の後処理を実装する
が挙げられる。

まとめ

再帰って漸化式みたいなイメージですよね。
おまけの疑問点が長くなってしまいました。
第3回はオブジェクト指向です。