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

【初心者向け】再帰処理で数値の各桁の合計を求めるJavaプログラムの書き方

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

再帰とは何か

再帰とは、物事を自己相似的な形で繰り返し処理していく手法のことです。プログラミング言語において、ある関数の内部から同じ関数を呼び出すことができる場合、この呼び出しを「関数の再帰呼び出し」と呼びます。

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

以下に、実際の入力と出力の例を示します。

入力

Enter the number : 12131415

出力

The Sum of digits of 12131415 is 18

アルゴリズム

Step 1 - START
Step 2 - 整数型の変数 my_input と my_result を宣言する
Step 3 - ユーザーから値を読み込む/あらかじめ値を定義する
Step 4 - 整数を引数に取る再帰関数「digitSum」を定義する。この関数は、ベースケースに到達するまで自分自身を繰り返し呼び出しながら余りを計算する
Step 5 - 再帰関数「digitSum」を呼び出し、その結果を my_result に代入する
Step 6 - 結果を表示する
Step 7 - 終了

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

この例では、プロンプトに対してユーザーが入力した値をもとに計算を行います。オンラインの実行環境でも実際に試すことができます。

import java.util.Scanner;
public class Sum{
    public static void main(String args[]){
        int my_input, my_result;
        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();
        my_result = digitSum(my_input);
        System.out.println("The Sum of digits of " + my_input + " is " + my_result);
    }
   static int digitSum(int n){
      if (n == 0)
         return 0;
      return (n % 10 + digitSum(n / 10));
   }
}

出力

Required packages have been imported
A reader object has been defined
Enter the number : 12131415
The Sum of digits of 12131415 is 18

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

この例では、整数値があらかじめプログラム内で定義されており、その値にアクセスしてコンソールに結果を表示します。

public class Sum{
   public static void main(String args[]){
      int my_input = 12131415;
      System.out.println("The number is defined as : " +my_input);
      int my_result = digitSum(my_input);
      System.out.println("The Sum of digits of " + my_input + " is " + my_result);
   }
   static int digitSum(int n){
      if (n == 0)
         return 0;
      return (n % 10 + digitSum(n / 10));
   }
}

出力

The number is defined as : 12131415
The Sum of digits of 12131415 is 18

まとめ

再帰を使った桁の合計計算のポイントは、n % 10 で最下位の桁を取り出し、n / 10 で残りの桁へ処理を進める点にあります。ベースケースとして n == 0 のときに 0 を返すことで、無限ループを防ぎながらすべての桁を加算できます。シンプルでありながら再帰の仕組みを学ぶのに最適な例なので、ぜひ手を動かして試してみてください。

  1. 再帰を使わずに数値の各桁の合計を求めるPythonプログラム

    プログラミングにおいて、数値の各桁の合計を求める処理は頻出する課題の一つです。再帰呼び出しを使わずにこの問題を解決したい場合、「%」演算子(剰余)、「+」演算子(加算)、そして「//」演算子(整数除算)を組み合わせることで、シンプルかつ効率的に実装できます。 実装のポイント 基本的な考え方は以下の通りです。 「% 10」で最下位の桁(1の位)を取り出す 取り出した桁を合計値に加算する 「// 10」で数値を1桁ずらし、数値が0になるまで繰り返す サンプルコード def sum_of_digits(my_num): sum_val = 0 while (my_num != 0

  2. Pythonで再帰関数を使って階乗を計算する方法を解説

    ある数の階乗(Factorial)とは、1からその数までのすべての整数を掛け合わせた積のことです。たとえば、5の階乗は「5 × 4 × 3 × 2 × 1 = 120」となります。再帰関数(Recursive Function)とは、自分自身を呼び出す関数のことを指します。この仕組みを使うと、階乗のように同じ処理を繰り返し行う計算を、シンプルで読みやすいコードで実装できます。再帰による階乗の計算例次のプログラムでは、factorial() 関数が引数を1つ受け取り、値を1ずつ減らしながら自分自身を呼び出します。そして引数が1に達した時点で呼び出しを終了し、結果を順番に掛け合わせて返します。de