JSFiddle - React, Tailwind, and code Playground

by Kushal Joshi

JavaScript

var count = 0;

var fibonacci = function (n) {
    count++
    return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2)
};

for (var i = 0; i <= 10; i += 1) {
    console.log('// ' + i + ': ' + fibonacci(i) );
};

console.log("fibonacci called " + count + " times");
count = 0;

// record fib numbers in a memo using a closure:
var fibonacci2 = (function (  ) {
    var memo = [0, 1];    // This is the memo. That's why it's called memo
    
    // This function is return and closes around the previous memo variable
    var fib = function (n) {
        count++
        var result = memo[n];
        if (typeof result !== 'number') {
            result = fib(n - 1) + fib(n - 2);
            memo[n] = result;    // creates the closure by referencing memo
        }
        return result;
    };
    return fib;
}( ));

for (var i = 0; i <= 10; i += 1) {
    console.log('// ' + i + ': ' + fibonacci2(i) );
};

console.log("fibonacci called " + count + " times");