var memorizer = function (memo, formula) {
var recur = function(n) {
var result = memo[n];
if(typeof result !== 'number') {
result = formula(recur, n);
memo[n] = result;
}
return result;
};
return recur;
}
var fibonacci = memorizer([0, 1], function(rec, n){
return rec(n - 1) + rec(n - 2);
})
var factorial = memorizer([1, 1], function(rec, n) {
return n * rec(n - 1);
})
var recur = function(n) {
var result = memo[n];
if(typeof result !== 'number') {
result = formula(recur, n);
memo[n] = result;
}
return result;
};
return recur;
}
var fibonacci = memorizer([0, 1], function(rec, n){
return rec(n - 1) + rec(n - 2);
})
var factorial = memorizer([1, 1], function(rec, n) {
return n * rec(n - 1);
})