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);