У меня есть 2 функции для вычисления n! (факториал). Первая - рекурсивная функция, вторая - прямой цикл. Я проверил их производительность в jsperf.com . Для всех браузеров, которые я тестировал, нерекурсивная функция превосходит рекурсивную, , кроме IE (протестировано для v7, 8 и 9). Теперь я очень привык к тому, что IE и jscript являются исключением, но в этом случае я стараюсь: в чем может быть причина различия (другими словами, если я хочу, чтобы мой факториал был быстрым в каждом браузере, я должен действительно проверить браузер первым;)?
Используются следующие функции:
//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;
}