1

同じタスクを実行する3つのJavaScript関数を作成しました。それらはすべて同じ結果を提供しますが、どれがより高速で最もスケーラブルか疑問に思っていますか?

これが私の関数の最初のものです

function odds(n, p) {
    var acc = 1;
    for (var i = 0; i < n; i++) {
        acc *= (n - i) / (p - i);
    }
    return acc;
}

二つ目

function odds(n, p) {
    if (n == 0) {
        return 1;
    } else {
        return (n / p) * odds(n - 1, p - 1);
    }
}

三つ目

var odds = (function () {
    var odds1 = function(n, p, acc) {
        if(n == 0) {
            return acc;
        } else {
            return odds1(n - 1, p - 1, (n / p) * acc);
        }
    }
    return function(n, p) {
        return odds1(n, p, 1);
    }  
}());
4

3 に答える 3

3

このような質問に答えるためにテストする必要がありますが、内部ループはほとんどの場合、javascriptの再帰よりも高速であることも一般的に真実です。jsPerfのようなテストハーネスは、実際のデータを提供するのに非常に役立ちます。

ここで、3つのケース用にjsPerfを作成しました:http://jsperf.com/oddsflavors。私が選んだパラメーター(どのパラメーターがあなたにとって最も重要かはわかりませんでした)の場合、最初のコードオプション(再帰のないもの)が2番目のコードオプションの約2倍の速さであることが示されています。

于 2012-07-24T04:08:00.180 に答える
3

http://jsperf.com/を使用してjavascriptのパフォーマンスをテストし、どの関数が高速であるかを知ることができます。

于 2012-07-24T03:44:49.250 に答える
0

JSLitmusjsPerfなど、さまざまなツールを使用してJavascriptコードの速度をテストできます。

また、この質問をチェックしてください:JavaScriptコードのパフォーマンステストをどのように行いますか?
そして、Javascriptのパフォーマンステストに関するこの記事。

于 2012-07-24T03:46:15.713 に答える