Quick 'n' dirty:
Code:
Number.prototype.fact = function() {
for (var i = 1, r = 1; i <= this; r *= i++);
return r;
};
One-liner:
Code:
Number.prototype.fact = function() { for (var i = 1, r = 1; i <= this; r *= i++); return r; };
Safe:
Code:
Number.prototype.fact = function() {
if (this < 0) return NaN;
for (var i = 1, r = 1; i <= this; r *= i++);
return r;
};
Using my toolkit:
Code:
var fact = (function(F, O) {
return F.compose(F.curry(F.reduce)(O.multiply), F.curry(F.range)(1));
})(Functional. Functional.Operator);
Without shortcuts:
Code:
var fact = Functional.compose(Functional.curry(Functional.reduce)(Functional.Operator.multiply), Functional.curry(Functional.range)(1));
In Python:
Code:
import operator
def fact(x):
return reduce(operator.mul, range(1, x + 1))
In Haskell:
Code:
fact = product . (enumFromTo 1)
Any more questions?
Bookmarks