Java
 Computer >> コンピューター >  >> プログラミング >> Java

再帰を使って自然数の合計を求めるJavaプログラムの作成方法

再帰とは

本記事では、再帰(リカージョン)を利用して自然数の合計を求めるJavaプログラムについて解説します。自然数とは、1から無限大までのすべての正の整数のことです。また、再帰関数とは、特定の条件が満たされるまで自分自身を繰り返し呼び出す関数を指します。

再帰とは、同一の構造を自己相似的に繰り返す処理のことです。プログラミング言語において、ある関数の中からその関数自身を呼び出すことができる場合、この呼び出しは「再帰呼び出し」と呼ばれます。

多くのプログラミング言語では、スタックを用いて再帰を実現しています。一般的に、ある関数(呼び出し元)が別の関数(呼び出し先)や自分自身を呼び出すと、実行の制御は呼び出し元から呼び出し先へ移ります。このとき、呼び出し元から呼び出し先へデータを受け渡すこともあります。

以下に具体例を示します。

入力

入力値が次であると仮定します。

Enter the number : 25

出力

期待される出力は次のとおりです。

The sum of natural numbers up to 25 is 325

アルゴリズム

Step 1 - 開始
Step 2 - 整数型の変数 my_input と my_sum を宣言する。
Step 3 - ユーザーから必要な値を読み込む、または値を定義する。
Step 4 - 整数を引数として受け取り、その値と直前の値との合計を、入力値が0になるまで返し続ける再帰関数「Add」を定義する。
Step 5 - 再帰関数を呼び出し、my_input の値を渡す。戻り値を保存する。
Step 6 - 結果を表示する。
Step 7 - 終了

例1:ユーザーからの入力を使用する場合

ここでは、プロンプトに対してユーザーが入力した値を使用します。オンラインのJava実行環境でも動作を確認できます。

import java.util.Scanner;
public class NaturalNumbers {
    public static void main(String[] args) {
        int my_input, my_sum;
        System.out.println("Required packages have been imported");
        Scanner my_scanner = new Scanner(System.in);
        System.out.println("A reader object has been defined ");
        System.out.print("Enter the number : ");
        my_input = my_scanner.nextInt();
        System.out.println("The number is defined as " +my_input);
        my_sum = Add(my_input);
        System.out.println("The sum of natural numbers up to " + my_input + " is " + my_sum);
    }
    public static int Add(int my_input) {
        if (my_input > 0)
            return my_input + Add(my_input - 1);
        else
            return my_input;
    }
}

出力

Required packages have been imported
A reader object has been defined
Enter the number : 25
The number is defined as 25
The sum of natural numbers up to 25 is 325

例2:値をあらかじめ定義しておく場合

ここでは、整数値をあらかじめ定義しておき、その値を読み込んでコンソールに表示します。入力処理が不要になるため、動作確認がより手軽になります。

public class NaturalNumbers {
    public static void main(String[] args) {
        int my_input, my_sum;
        my_input = 25;
        System.out.println("The number is defined as " +my_input);
        my_sum = Add(my_input);
        System.out.println("The sum of natural numbers up to " + my_input + " is " + my_sum);
    }
    public static int Add(int my_input) {
        if (my_input > 0)
            return my_input + Add(my_input - 1);
        else
            return my_input;
    }
}

出力

The number is defined as 25
The sum of natural numbers up to 25 is 325

再帰の仕組みのポイント

再帰関数 Add の内部では、引数 my_input が0より大きい場合に「my_input + Add(my_input - 1)」を返します。これにより、Add(25) → 25 + Add(24) → … という形で処理が順に展開され、最終的に Add(0) が0を返した時点で再帰が終了します。その結果、1から25までの合計である325が得られます。

なお、再帰を使わずとも「n × (n + 1) ÷ 2」という公式で同じ結果を求められますが、再帰の考え方を理解するうえで、このような実装は非常に良い練習になります。

  1. 【C言語】再帰関数を使って2つの整数の最大公約数(GCD)を求める方法

    問題 C言語において再帰関数を使用し、与えられた2つの整数の最大公約数(GCD:Greatest Common Divisor)を求めます。 解決策 再帰関数を用いて2つの整数の最大公約数を求めるには、「ユークリッドの互除法」が利用できます。これは「2つの数のGCDは、大きい方の数を小さい方の数で割った余りと、小さい方の数とのGCDに等しい」という性質を応用した手法です。この計算を余りが0になるまで再帰的に繰り返すことで、GCDを効率よく求めることができます。 アルゴリズム 再帰関数を使って2つの整数のGCDを求めるためのアルゴリズムは、以下の手順に従います。 ステップ1 − 再帰関数を

  2. Pythonで自然数の合計を求める3つの方法【while文・for文・sum関数】

    Pythonでは、自然数の合計を求める方法がいくつかあります。この記事では、whileループ、forループ、そして組み込み関数sum()を使った3つの方法を、具体的なコード例とともにわかりやすく解説します。 方法1:whileループを使う whileループを使用すると、変数iの値を1ずつ増やしながら、その値を累積的に加算していくことができます。以下の例では、最初の10個の自然数(1から10まで)の合計を計算しています。 s,i=0,0 n=10 while i<n: i=i+1 s=s+i print ("sum of first 10 natural num