JavaScript で最速の階乗プログラム

Sahil Bhosale 2023年10月12日
  1. JavaScript で再帰を使用する階乗プログラム
  2. JavaScript で反復を使用する階乗プログラム
  3. JavaScript で最速の階乗プログラム
JavaScript で最速の階乗プログラム

階乗プログラムは、指定された数の因子を見つけるために使用されます。たとえば、数値 8 の因数は 1、2、4、および 8 です。数値 0 と 1 の両方の因数は常に 1 です。同様に、すべての数値にはいくつかの階乗番号があります。

JavaScript で階乗プログラムを作成する方法は 2つあります。1つは再帰を使用する方法、もう 1つは反復を使用する方法です。for() ループを使用してこれらのプログラムの両方を 1000 回呼び出し、このプログラムを呼び出すたびに、数値 1000 の階乗を見つけます。

両方の方法を詳細に見てみましょう。後で、どちらが最速の階乗プログラムであるかを確認します。

JavaScript で再帰を使用する階乗プログラム

再帰的方法は、階乗プログラムを作成する 1つの方法です。再帰では、いくつかの基本条件を使用して同じ関数を何度も呼び出します。基本条件は、無限ループに入らないようにします。

再帰プログラムの実行にかかる時間を確認するには、Date オブジェクトの getItem() メソッドを使用します。start 変数はプログラムが実行を開始した時刻を格納し、end はプログラムが実行を完了した時刻を格納します。

ご存知のように、ゼロの階乗は 1 です。したがって、これを基本条件とし、数値がゼロになるとすぐに 1 を返します。それ以外の場合は、0 に達するまで同じ階乗関数を何度も呼び出すことにより、その数の階乗を見つけ続けます。再帰を使用した階乗プログラムの実装は次のとおりです。

let start, end;
start = new Date().getTime();

for (var i = 0; i < 10000; i++) recursionFactorial(1000)

  function recursionFactorial(num) {
    if (num === 0)
      return 1;
    else
      return num * recursionFactorial(num - 1);
  }

end = new Date().getTime();

console.log(end);

出力:

1627808767415

上記の出力は、再帰プログラムが実行を完了した時間であり、これも end 変数に格納されます。時間はミリ秒単位で、ブラウザのコンソールウィンドウに出力されます。

JavaScript で反復を使用する階乗プログラム

階乗プログラムを作成する別の方法は、反復を使用することです。反復では、forwhile、または do-while ループなどのループを使用します。

ここでも、Date オブジェクトの getItem() メソッドを使用して、反復プログラムの実行にかかる時間を確認します。start2 変数は、プログラムが実行を開始した時刻を格納し、end2 は、反復プログラムが実行を完了した時刻を格納します。

iterationFactorial() 関数では、最初にカウンターを 1 に設定し、次に for ループを使用して counter 変数をインクリメントして因子を見つけます。最後に、counter 変数の値を返します。

let start2, end2;
start2 = new Date().getTime();

for (var i = 0; i < 10000; i++) iterationFactorial(1000);

function iterationFactorial(num) {
  var counter = 1;
  for (var i = 2; i <= num; i++) counter = counter * i;
  return counter;
}

end2 = new Date().getTime();

console.log(end2);

出力:

1627808727136

上記の出力は、プログラムが反復プログラムを終了した時刻であり、これも end2 変数に格納されています。時間はミリ秒単位で、ブラウザのコンソールウィンドウに出力されます。

JavaScript で最速の階乗プログラム

これで、数の階乗を見つけるための再帰プログラムと反復プログラムの両方を見てきました。ここで、最終結果(つまり、これらのプログラムの両方を実行するのにかかる時間)をチェックして、これら 2つの階乗プログラムのどちらが速いかを確認しましょう。

再帰プログラムの開始時刻と終了時刻は start 変数と end 変数に、反復プログラムの時刻は start2 変数と end2 変数にすでに格納されています。次に、開始時刻から終了時刻を引いて、ミリ秒単位の結果を取得する必要があります。

let res1 = end - start;
let res2 = end2 - start2;

console.log('res1: ' + res1 + ' res2: ' + res2)

出力:

res1: 1626 res2: 27

最終結果は、再帰プログラムが反復プログラムよりもはるかに時間がかかることを示しています。したがって、JavaScript では、反復階乗プログラムが最速です。この出力は、このプログラムを実行するシステムによって異なる場合があります。

著者: Sahil Bhosale
Sahil Bhosale avatar Sahil Bhosale avatar

Sahil is a full-stack developer who loves to build software. He likes to share his knowledge by writing technical articles and helping clients by working with them as freelance software engineer and technical writer on Upwork.

LinkedIn