JSFiddle - React, Tailwind, and code Playground
by Hui Zheng
JavaScript
memoize = function(func, hasher) {
//console.log("memo!");
var memo = {};
hasher || (hasher = function(a){return a;});
return function() {
var key = hasher.apply(this, arguments);
var old = key in memo;
//console.log("old:", old, ";key:", key);
return old ? memo[key] : (memo[key] = func.apply(this, arguments));
};
};
var fib = function(n) {
if (n == 1 || n == 2) {
return 1;
}
return fib(n - 1) + fib(n - 2)
}
var n = 40;
console.time("f1");
var result1 = fib(n);
console.timeEnd("f1");
var fib0 = fib;
var fib1 = fib = memoize(fib); // self assignment!
console.time("f2");
var result2 = fib1(n);
console.timeEnd("f2");
console.time("f0");
var result0 = fib0(n);
console.timeEnd("f0");
console.log("result:", result1, result2, result0);
console.assert(result1 == result2);