gpt4 book ai didi

javascript - 性能:递归-非递归(IE)

转载 作者:行者123 更新时间:2023-11-29 15:51:11 25 4
gpt4 key购买 nike

我有 2 个函数来计算 n! (阶乘)。第一个是递归函数,第二个是直接循环。我在 jsperf.com 中测试了它们的性能.对于我测试的所有浏览器,非递归函数都优于递归函数,IE 除外(已针对 v7、8 en 9 进行测试)。现在我非常习惯 IE 和 jscript 是异常(exception),但在这种情况下我很好奇:造成差异的原因可能是什么(换句话说,如果我希望我的阶乘在每个浏览器中都快,我必须真的先检查浏览器;)?

用到的函数有:

//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;
}

最佳答案

可能是因为浏览器无法优化tail recursion .它没有意识到您的 lambda 函数可以迭代重写并消除函数调用的开销。

浏览器并不是真正意义上的完全成熟的编译器,我不希望它们能够执行传统编译器执行的所有优化。如果某个浏览器可以执行特定的优化,那就太好了。但这并不意味着一切都会。

关于javascript - 性能:递归-非递归(IE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5535296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com