Javaで再帰を使って累乗を計算する方法を解説!サンプルコード付き
この記事では、再帰(リカージョン)を使用して数値の累乗(べき乗)を計算するJavaプログラムについて詳しく解説します。再帰関数とは、特定の条件が満たされるまで自分自身を繰り返し呼び出す関数のことです。
再帰とは何か?
再帰とは、同じ構造を自己相似的に繰り返す処理のことです。プログラミング言語において、ある関数の中から同じ関数自身を呼び出すことができる場合、これを「関数の再帰呼び出し」と呼びます。
多くのプログラミング言語では、再帰はスタック(Stack)という仕組みによって実装されています。一般的に、ある関数(呼び出し元)が別の関数や自分自身(呼び出し先)を呼び出すと、実行制御が呼び出し元から呼び出し先へ移ります。この際、引数などのデータも呼び出し元から呼び出し先へ渡されます。
それでは、実際の動作を見ていきましょう。
入力例
Enter the number and its power 2 and 5
出力例
The result of 2^5 is 32
アルゴリズム
Step 1 - 開始 Step 2 - 整数型の変数 my_power、my_input、result を宣言する Step 3 - ユーザーから値を読み込む、または値を直接定義する Step 4 - 再帰関数 getPower を定義する。この関数は2つの整数を引数として受け取り、入力値同士の積を my_power 回計算して返す Step 5 - my_power の値が0より大きい間、関数を再帰的に呼び出し続け、結果を格納する Step 6 - 結果を表示する Step 7 - 終了
例1:ユーザーからの入力を受け取る場合
この例では、Scannerクラスを使ってユーザーから数値と指数を入力として受け取ります。
import java.util.Scanner;
public class Power {
public static void main(String[] args) {
int my_power, my_input, result;
my_input = 2;
my_power = 5;
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.print("Enter the power value : ");
my_power = my_scanner.nextInt();
result = getPower(my_input, my_power);
System.out.println("The result of " +my_input + "^" + my_power + " is " + result);
}
public static int getPower(int my_input, int my_power) {
if (my_power != 0) {
return (my_input * getPower(my_input, my_power - 1));
}
else {
return 1;
}
}
}
出力結果
Required packages have been imported A reader object has been defined Enter the number : 2 Enter the power value : 5 The result of 2^5 is 32
例2:値を事前に定義しておく場合
この例では、整数値があらかじめコード内で定義されており、その値を使って計算結果がコンソールに表示されます。入力処理がないため、シンプルに動作を確認できます。
public class Power {
public static void main(String[] args) {
int my_power, my_input, result;
my_input = 2;
my_power = 5;
System.out.println("The number and its power is defined as " +my_input + " and " +my_power);
result = getPower(my_input, my_power);
System.out.println("The result of " +my_input + "^" + my_power + " is " + result);
}
public static int getPower(int my_input, int my_power) {
if (my_power != 0) {
return (my_input * getPower(my_input, my_power - 1));
}
else {
return 1;
}
}
}
出力結果
The number and its power is defined as 2 and 5 The result of 2^5 is 32
再帰関数の仕組みのポイント
getPowerメソッドの動作を整理すると、以下のようになります。
- 再帰ケース: 指数(my_power)が0でない場合、「底 × getPower(底, 指数 - 1)」を返します。つまり、指数を1ずつ減らしながら自分自身を呼び出します。
- 基底ケース: 指数が0になった時点で1を返します。ここで再帰が終了し、各呼び出しの結果が掛け合わされて最終的な累乗の値が求まります。
例えば 2^5 の場合、2 × 2 × 2 × 2 × 2 × 1 という計算が行われ、結果として32が得られます。このように再帰を使うことで、ループ処理を書かずに簡潔に累乗計算を実装できるのが大きな特徴です。
-
【Java】HashMapを使って文字列内の各文字の出現回数をカウントする方法
JavaではHashMapを利用することで、文字列内に含まれる各文字の出現回数を効率よくカウントできます。キーに文字(Character)、値に出現回数(Integer)を格納する仕組みにより、シンプルかつ高速な文字数集計が可能です。 サンプルコード import java.io.*; import java.util.*; public class Demo{ static void count_characters(String input_str){ HashMap<Character, Integer> my_map = new HashMap<
-
複利を計算するJavaプログラム
この記事では、Javaを使って複利を計算するプログラムを紹介します。複利とは、元本だけでなく発生した利息に対してもさらに利息がつく計算方式のことで、次の数式で求められます。複利 = 元本 × (1 + 年利率 ÷ 100)期間サンプルコードimport java.io.*; public class Demo{ public static void main(String args[]){ double princ = 456000, rt = 9.75, tm = 7; double comp_int = princ * (Math.pow((1 +