実際に書いてみる!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です
監修してくれたメンター
堀田 悠貴
以前はSEとして某大学病院の電子カルテシステムの保守・開発に携わっていました。 基本業務はJavaでしたが案件次第で色々他のことにも手を出す必要があり、その都度苦労した記憶があります。 |
内容分かりやすくて良かったです!
ゆかりちゃんも分からないことがあったら質問してね!
分かりました。ありがとうございます!
TechAcademyでは、初心者でもJavaやServletの技術を使ってWebアプリケーション開発を習得できるオンラインブートキャンプJava講座を開催しています。
挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。