构造一个带有之前结果缓存的函数,减少不必要的计算
/*
传入 初始缓存记忆的数组memo 和计算公式formula
返回 一个管理memo存储和在需要时调用formula的函数recur
*/
var memoizer = function(memo,formula) {
var recur=function(n) {
var result=memo[n];
if (typeof result !=='function') {
result=formula(recur,n);
memo[n]=result;
}
return result;
};
return recur;
}
用我们的memoizer函数定义fibonacci函数
var fibonacci=memoizer([0,1],function(recur,n) {
return recur(n-1)+recur(n-2);
})
用我们的memoizer函数定义阶乘函数
var fibonacci=memoizer([1,1],function(recur,n) {
return n*recur(n-1);
})