1

I wrote three javascript functions which works the same task. They all provide the same result but I am wondering which one of them is faster and most scalable?

Here are my functions first one

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

second one

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

third one

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这样的测试工具对于提供真实数据非常非常有帮助。

我在这里为您的三个案例构建了一个 jsPerf:http: //jsperf.com/oddsflavors。对于我选择的参数(我不确定哪些参数对您最重要),它显示您的第一个代码选项(没有递归的那个)大约是第二个的两倍。

于 2012-07-24T04:08:00.180 回答
3

你可以使用http://jsperf.com/来测试 javascript 的性能,这样你就可以知道哪个函数更快

于 2012-07-24T03:44:49.250 回答
0

您可以使用各种工具来测试 Javascript 代码的速度,例如JSLitmusjsPerf

另外,看看这个问题:你如何对 JavaScript 代码进行性能测试?
还有这篇关于 Javascript 性能测试的文章。

于 2012-07-24T03:46:15.713 回答