构造带记忆功能的函数

构造一个带有之前结果缓存的函数,减少不必要的计算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
传入 初始缓存记忆的数组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函数

1
2
3
var fibonacci=memoizer([0,1],function(recur,n) {
return recur(n-1)+recur(n-2);
})

用我们的memoizer函数定义阶乘函数

1
2
3
var fibonacci=memoizer([1,1],function(recur,n) {
return n*recur(n-1);
})