我有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