我有2个函数来计算n! (阶乘)。第一个是递归函数,第二个是直线循环。我已经在jsperf.com中测试过他们的表现。对于我测试的所有浏览器,除了IE(测试版本为v7,8 en 9)外,非递归函数的性能优于递归函数。现在我非常习惯IE和jscript作为例外,但在这种情况下,我是拙劣的:可能是造成差异的原因(换句话说,如果我希望我的因子在每个浏览器中都很快,我必须真的首先检查浏览器;)?性能:递归 - 非递归(IE)
使用的功能是:
//recursive
function factorial(n) {
var result = 1,
fac = function(n) {
return result *= n, n--, (n > 1 ? fac(n) : result);
};
return fac(n);
}
//nonrecursive
function factorialnr(n){
var r = n;
while (--n > 1) {
r *= r != n ? n : 1;
}
return r;
}
尝试用r = r *(...)替换r * =,因为对于复合运算符,IE很慢。还可以尝试放入一个if循环而不是三元运算符 - 更简单时,更多的代码通常会更快。哦,在IE 6中,非递归版本比递归版本快7倍。 – RobG 2011-04-04 06:39:08
由于您在第一个条件测试中已经减少了'n',所以'r!= n'总是成立。 – Gumbo 2011-04-04 06:42:10
http://jsperf.com/factorial-recursive-vs-not-recursive/2这样做,但没有区别。 – KooiInc 2011-04-04 06:43:15