memoizer函数取得的一个初始的memo数组和formula函数。它返回一个管理memo储存和在需要时调用用formula函数的recur函数。我们把这个recur函数和它的参数传递给formula函数:
var memoizer = 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;
}
如下例子:
1、斐波那契数列
var fibonacci = memoizer([0, 1], function(recur, n) {
return recur(n - 1) + recur(n - 2);
});
2、阶乘函数
var factorial = memoizer([1, 1], function(recur, n) {
return n * recur(n - 1);
});