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 で反復を使用する階乗プログラム
階乗プログラムを作成する別の方法は、反復を使用することです。反復では、for
、while
、または 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 では、反復階乗プログラムが最速です。この出力は、このプログラムを実行するシステムによって異なる場合があります。