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

再帰を使って2つの数値の積を求めるJavaプログラム

本記事では、再帰(リカージョン)を使って2つの数値の積を求める方法について解説します。再帰関数とは、特定の条件(ベースケース)が満たされるまで、自分自身を繰り返し呼び出す関数のことです。

再帰とは、自己相似的な形で処理を繰り返す手法のことを指します。プログラミング言語において、ある関数の中で同じ関数自身を呼び出すことができる仕組みがあり、これを再帰呼び出しと呼びます。

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

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

入力

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

Enter two number : 12 and 9

出力

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

The product of 12 and 9 is 108

アルゴリズム

Step 1 - START
Step 2 – my_input と my_result という2つの整数値を宣言する
Step 3 - ユーザーから必要な値を読み込む/あらかじめ値を定義する
Step 4 - 2つの整数を引数に取る再帰関数「getproduct」を定義する。この関数は、ベースケースに到達するまで自分自身を繰り返し呼び出しながら計算を行う
Step 5 - 再帰関数「getproduct」を呼び出し、その結果を保存する
Step 6 - 結果を表示する
Step 7 - STOP

例1:ユーザーからの入力を受け付ける場合

この例では、プロンプトに対してユーザーが入力した値をもとに計算を行います。オンラインコンパイラ上で実際に動作を確認することもできます。

import java.util.Scanner;
public class ProductRecursion{
   public static void main (String[] args){
      int my_input_1, my_input_2;
      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_1 = my_scanner.nextInt();
      System.out.print("Enter the number : ");
      my_input_2 = my_scanner.nextInt();
      System.out.println("The product of "+my_input_1 +" and " +my_input_2 +" is " +getproduct(my_input_1, my_input_2));
   }
   static int getproduct(int my_input_1, int my_input_2){
      if (my_input_1 < my_input_2)
         return getproduct(my_input_2, my_input_1);
      else if (my_input_2 != 0)
          return (my_input_1 + getproduct(my_input_1, my_input_2 - 1));
      else
         return 0;
   }
}

出力

Required packages have been imported
A reader object has been defined
Enter the number : 12
Enter the number : 9
The product of 12 and 9 is 108

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

この例では、整数値が事前に定義されており、その値を読み取ってコンソールに表示します。

public class ProductRecursion{
   public static void main (String[] args){
      int my_input_1, my_input_2;
      my_input_1 = 12;
      my_input_2 = 9;
      System.out.println("The two numbers are defined as " +my_input_1 +" and " +my_input_2);
      System.out.println("The product of "+my_input_1 +" and " +my_input_2 +" is " +getproduct(my_input_1, my_input_2));
   }
   static int getproduct(int my_input_1, int my_input_2){
      if (my_input_1 < my_input_2)
         return getproduct(my_input_2, my_input_1);
      else if (my_input_2 != 0)
         return (my_input_1 + getproduct(my_input_1, my_input_2 - 1));
      else
         return 0;
   }
}

出力

The two numbers are defined as 12 and 9
The product of 12 and 9 is 108

まとめ

このように、再帰関数を利用することで、掛け算を繰り返し加算に置き換えて積を求めることができます。ポイントは以下の2点です。

  • ベースケース: 片方の数値が0になった時点で0を返し、再帰を終了させます。
  • 引数の入れ替え: 小さい方の数値を減算対象にすることで、再帰の回数を最小限に抑えられます。

再帰の考え方は階乗計算やフィボナッチ数列などにも応用できるため、ぜひ理解を深めておきましょう。

  1. Javaで台形の面積を求めるプログラムの作成方法を解説

    この記事では、Javaを使って台形(トラペジウム)の面積を求める方法について詳しく解説します。台形とは、少なくとも1組の対辺が互いに平行になっている四角形のことです。平行な2つの辺は「底辺」と呼ばれ、平行でない残りの2つの辺は「脚」と呼ばれます。英語圏では trapezoid(トラペゾイド)と呼ばれることもあります。 台形の面積は、次の公式を使って計算できます。 面積 = (高さ ÷ 2) × (上底 + 下底) すなわち、 面積 = ½ × (平行な2辺の長さの合計) × (平行な2辺間の垂直距離) 以下に具体的なイメージを示します。平行な2辺の長さを a、b、台形の高さを h としたとき

  2. 【Java入門】長方形の周囲(外周)を求めるプログラムの作り方

    長方形の周囲とは? この記事では、Javaを使って長方形の周囲(外周)を求める方法を解説します。長方形の周囲とは、長方形の4つの辺すべての長さを足し合わせた合計のことで、次の図のように「縦の辺2本」と「横の辺2本」の長さを合計したものに相当します。 長方形は向かい合う辺の長さが等しいという性質を持つため、周囲は次の式で計算できます。 周囲 = 2 ×(縦の長さ + 横の長さ) 入力と出力の例 たとえば、入力が次の値であるとします。 長方形の各辺の長さ:5, 8, 5, 8 このとき、期待される出力は次のとおりです。 Perimeter : 26 アルゴリズム 処理の流れは以下のようになりま