我编写了三个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);
}
}());
答案 0 :(得分:3)
您可以使用http://jsperf.com/来测试javascript性能,以便了解哪个功能更快
答案 1 :(得分:3)
你必须进行测试以回答这样的问题,但通常情况下,内部循环几乎总是比javascript中的递归更快。像jsPerf这样的测试工具对于为您提供真实数据非常非常有用。
我在这里为你的三个案例建立了一个jsPerf:http://jsperf.com/oddsflavors。对于我选择的参数(我不确定哪个参数对你来说最重要),它显示你的第一个代码选项(没有递归的那个)大约是第二个代码选项的两倍。
答案 2 :(得分:0)
您可以使用各种工具来测试Javascript代码的速度,例如JSLitmus和jsPerf。
另外,请查看此问题:How do you performance test JavaScript code?
和this article进行Javascript性能测试。