数週間前に階乗関数にsetTimeoutを使用することについて質問しましたが、残念ながら未登録のアカウントであり、完全な回答は得られませんでした。
私の主な問題は、数値の階乗を計算するが、setTimeoutまたはsetIntervalコマンドを使用する関数を作成したいということです。この背後にある推進力は、長時間実行されるスクリプトの警告を回避するために、IEが使用するカウンターをリセットすることです。現在、私が持っている階乗関数は次のとおりです。
function factorial(n) {
return 0 === n || 1 === n ? 1 : n * factorial(n - 1)
}
私の他の投稿では、jsumnersは親切にも、階乗を計算するときにsetTimeoutを定期的に使用しようとするコードを提供してくれました。
function factorial(x) {
executions++;
if (x > 1) {
if (executions % 20 === 0) {
return (function() {
var y = x;
setTimeout(function(y) { return y*factorial(y-1); }, 1);
});
} else {
return x*factorial(x-1);
}
} else {
executions = 0;
return 1;
}
}
上記のコードでは、理論的にはsetTimeoutコマンドを使用して、経過した実行の数が20倍(mod 20)のときに次の乗算を実行する必要があります。残念ながら、コードは機能しません。20より大きい数値の階乗を計算しようとすると、結果はNaNになります。数が20未満の場合、答えは正解です。
setTimeoutまたはsetIntervalコマンドを使用して階乗を計算するこの方法または別の方法の解決策を知っている人はいますか?
ありがとう!