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

JavaScriptで再帰を使った階乗の計算方法をわかりやすく解説

本記事では、再帰(リカーシブ)のアプローチを利用して、数値 n の階乗を計算するJavaScript関数の作成方法を解説します。

階乗とは?

階乗とは、ある正の整数から1までのすべての整数を掛け合わせた値のことです。例えば、5の階乗は「5 × 4 × 3 × 2 × 1 = 120」となります。なお、数学の定義上、0の階乗は1とされています。

再帰関数 recursiceFactorial() の実装

ここでは、カスタム関数 recursiceFactorial() を作成して、再帰的に階乗を求めます。コードは以下の通りです。

const num = 9;
const recursiceFactorial = (num, res = 1) => {
    if(num){
        return recursiceFactorial(num - 1, res * num);
    };
    return res;
};

コードの仕組み

  • 引数 num が0以外の場合、num を1減らしながら、res に現在の num を掛けた値を渡して自分自身を再帰的に呼び出します。
  • num が0になった時点で、累積された res を返します。これが階乗の計算結果です。
  • デフォルトパラメータ res = 1 を設定しているため、呼び出し時に第2引数を省略しても正しく動作します。

関数の呼び出し方法

次に、関数を実際に呼び出して、階乗の計算を行ってみましょう。

console.log(recursiceFactorial(num));
console.log(recursiceFactorial(6));
console.log(recursiceFactorial(10));

サンプルコード

ここまでの内容を踏まえて、コード全体を記述すると以下のようになります。

const num = 9;
const recursiceFactorial = (num, res = 1) => {
    if(num){
        return recursiceFactorial(num - 1, res * num);
    };
    return res;
};
console.log(recursiceFactorial(num));
console.log(recursiceFactorial(6));
console.log(recursiceFactorial(10));
console.log(recursiceFactorial(5));
console.log(recursiceFactorial(13));

出力結果

コンソールには以下のように出力されます。

362880
720
3628800
120
6227020800

まとめ

このように、再帰を活用することで、シンプルかつ直感的に階乗を計算できる関数を実装できます。各呼び出しで数値を減らしながら結果を積み上げていく構造は、再帰処理の基本的な考え方を学ぶのに最適な例といえるでしょう。

なお、非常に大きな数値を扱う場合、呼び出し回数が増えてスタックオーバーフローが発生する可能性があります。また、13以上の階乗は通常のNumber型では精度が落ちるため、厳密な計算が必要なケースでは BigInt やループ処理の活用も検討してください。

  1. JavaScriptで階乗から元の数値を逆算して求める方法

    本記事では、数値を唯一の引数として受け取り、その数値が「ある整数の階乗」と一致するかどうかを判定するJavaScript関数の作成方法を解説します。 問題の概要 作成する関数には、以下の要件があります。 引数として受け取った数値と等しい階乗を持つ整数が存在するかどうかを確認する 該当する整数が存在する場合は、その整数を返す 存在しない場合は、-1 を返す 例えば、入力が 720 の場合を見てみましょう。 const num = 720; 720 = 6 × 5 × 4 × 3 × 2 × 1 = 6! となるため、期待される出力は 6 です。 const output = 6;

  2. JavaScriptで数値の階乗の桁数を求める方法

    問題JavaScriptで、数値 num を唯一の引数として受け取る関数を作成することを考えます。この関数は、num の階乗(n!)が何桁になるかを計算し、その桁数を返す必要があります。たとえば、関数への入力が次のような場合を考えてみましょう。入力const num = 7;出力const output = 4;出力の解説7! = 5040 であり、5040は4桁の数字であるため、結果は 4 となります。アプローチ:対数を使った賢い計算方法一見すると、階乗を直接計算して文字列の長さを数えればよさそうに思えます。しかし、階乗は極めて急激に増加するため、少し大きな数でもすぐにJavaScriptの