// attempt to make a swift-style generic memoize idiom ( https://gist.github.com/berkus/8a9e104f8aac5d025eb5 ) function memoize(body) { var memo = {}; return function memo_op(param) { if (memo[param] === undefined) memo[param] = body(memo_op, param); return memo[param]; } } var fibonacci = memoize(function (fibonacci, n) { return (n < 2 ? n : fibonacci(n-1) + fibonacci(n-2)); }); console.log(fibonacci(45) / fibonacci(44));