Y combinator with memoization | function Ymem(F, cache) {
if (!cache) cache = {};
return function(arg) {
if (cache[arg]) return cache[arg];
var answer = (F(function(n) {
return (Ymem(F, cache))(n);
}))(arg);
cache[arg] = answer;
return answer;
};
}
var fib4 = Ymem(function(g) {
return (function(n) {
if (n == 0) return 0;
if (n == 1) return 1;
return g(n - 1) + g(n - 2);
});
});
fib4(200);
fib4(200);
| ready |
direct | function fibonacci_direct(n) {
if (n < 2) return n;
return (Math.pow((1 + r5) / 2, n) - Math.pow((1 - r5) / 2, n)) / r5;
}
fibonacci_direct(200);
fibonacci_direct(200);
| ready |
loop | function fibonacci_loop(n) {
if (n < 2) return n;
var previous = 0;
var current = 1;
var next;
for (var i = 1; i < n; i++) {
next = previous + current;
previous = current;
current = next;
}
return current;
}
fibonacci_loop(200);
fibonacci_loop(200);
| ready |
Just Messin' Around | var fibByIndex = function(n) {
if (n <= 1) {
return n;
}
return FibulaOblongata(n - 1) + FibulaOblongata(n - 2);
}
var memoize = function(fn) {
var cache = {};
return function(arg) {
if (arg in cache) {
return cache[arg];
}
cache[arg] = fn(arg);
return cache[arg];
};
}
FibulaOblongata = memoize(fibByIndex);
FibulaOblongata(200);
FibulaOblongata(200);
| ready |
fast loop | function fib_fastloop(n) {
var half = Math.floor((n - 1) / 2);
for (var i = 0, a = 0, b = 1; i < half; i++, b += (a += b)) {}
return n % 2 == 0 ? b : a;
}
fib_fastloop(200);
fib_fastloop(200);
| ready |
recursive with memoization | function fib2(n) {
if (n == 0) return 0;
if (n == 1) return 1;
return fib2(n - 1) + fib2(n - 2);
}
function memo(f) {
var cache = {}
return function(x) {
if (typeof cache[x] === 'undefined') {
cache[x] = f(x);
}
return cache[x];
}
}
fib2 = memo(fib2);
fib2(200);
fib2(200);
| ready |
Y combinator | var Y = function(F) {
return (function(x) {
return F(function(y) {
return (x(x))(y);
});
})(function(x) {
return F(function(y) {
return (x(x))(y);
});
});
};
var FactGen = function(fact) {
return (function(n) {
return ((n == 0) ? 1 : (n * fact(n - 1)));
});
};
fib3 = (Y(FactGen))
fib3(200);
fib3(200);
| ready |