icon
icon

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

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

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

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

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

 

そもそもJavaについてよく分からないという方は、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やServletの技術を使ってWebアプリケーション開発を習得できるオンラインブートキャンプJava講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」

こんなささいな悩みでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する