実際に書いてみる!Javaで階乗の計算を行う方法【初心者向け】

初心者向けにJavaで階乗を行う方法について解説しています。階乗計算は1から指定の数値までのすべての整数の積です。ここでは再帰処理を使った階乗計算の方法を紹介します。実行と計算結果を実際の例で確認しましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Javaで階乗を行う方法について解説します。

実際にプログラムを書いて説明しているので、ぜひ理解しておきましょう。

 

なお本記事は、TechAcademyのJava講座の内容をもとに作成しています。

 

田島悠介

今回は、Javaに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

階乗を行う方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

階乗計算の書き方

高校数学の学習範囲になりますが、階乗とは、1からある数までの連続する整数の積のことです。

例えば1から5までを掛け合わせた結果は5の階乗といい、 5! と書き表します。

5!は「 1 × 2 × 3 × 4 × 5 」なので「 120 」となります。この階乗の計算をプログラムで行う場合、計算メソッドを再帰処理と呼ばれる形で作成することができます。

再帰処理のメソッドは処理中に自分自身を呼び出します。
(例)

void loopMethod(){
  loopMethod();
}

上記のloopMethod( )を実行すると、その中でloopMethod()を呼び、更にその中で・・と自分自身を呼び続けます。

ただ、この例は終了するための処理がないため、実行すると無限ループになってしまいます。

実際に再帰処理を書く際には、なんらかの終了条件を設ける必要があります。

 

実際に階乗計算をするメソッドを書いてみましょう。
(階乗計算する再帰処理メソッドの例)

int factorial(int n){
  if(n == 0){
    return 1;
  }
  return n * factorial(n-1);
}

上記のメソッドを3を引数に渡して実行したとします。

その場合、まず、このメソッドは 3 と factorial(2) の返す値の積を返そうとします。

次に、factorial(2)は 2 と factorial(1) の返す値の積を、更に次に、factorial(1)は 1 と factorial(0) の返す値の積を、そして、factorial(0)がif文の中に入り、 1 を返します。

これにより具体的には「 1 × 1 × 2 × 3 」の計算が行われます。

引数が変わっても、5であれば「 1 × 1 × 2 × 3 × 4 × 5 」が引数が変わっても、10であれば「 1 × 1 × 2 × 3 … 8 × 9 × 10 」の計算が行われます。

引数が 0 の時に1を返すのは、数学的に0の階乗は1と定められているからです。

 

実際に書いてみよう

下記のプログラムは左欄の例と同様に階乗の計算を行うプロフラムです。

大きな数に対応するためにBigIntegerクラスを使用していますが、再帰処理のロジックは例と全く同じです。

実行後に入力された数の階乗を計算して表示します。

import java.math.BigInteger;
import java.util.Scanner;

public class LoopSample {

  public static void main(String[] args) {
    LoopSample loopSample = new LoopSample();

    System.out.println("入力した整数の階乗を計算します");
    Scanner scan = new Scanner(System.in);
    String input = scan.nextLine();
    System.out.println("入力値:"+input);
    scan.close();

    String s = loopSample.factorialBigInt(new BigInteger(input)).toString();
    System.out.println(input+"の階乗は"+s+"です");
}

  BigInteger factorialBigInt(BigInteger bi){
    if(bi.longValue() == 0){
      return new BigInteger("1");
    }
    return bi.multiply(factorialBigInt(bi.subtract(new BigInteger("1"))));
  }
}

 

実行結果

入力した整数の階乗を計算します
20
入力値:20
20の階乗は2432902008176640000です

 

[PR] Javaで挫折しない学習方法を動画で公開中

監修してくれたメンター

堀田 悠貴

以前はSEとして某大学病院の電子カルテシステムの保守・開発に携わっていました。
基本的にJavaを使用してクライアント側のプログラム開発を担当していました。

基本業務はJavaでしたが案件次第で色々他のことにも手を出す必要があり、その都度苦労した記憶があります。
現在はその会社を退社して、こちらでのメンター業務のみ行っています。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

また、オンラインのプログラミングスクールTechAcademyでは、Java講座を開催しています。

JavaやServletの技術を使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。