记忆是主要用于加速程序计算的一种优化技术,使得函数避免重复计算之前被处理的输入,而返回已缓存的结果
以斐波那契数列和阶乘为例
定义一个函数,参数为一个数组memo和一个回调函数formule
var memoizer = function (memo, formule) {
var recur = function (n) {
var result = memo[n]
if (typeof result !== 'number') {
result = formule(recur, n)
memo[n] = result
}
return result
}
return recur
}
调用斐波那契数列函数
var fibonacci = memoizer([0, 1], function (recur, n) {
return recur(n - 1) + recur(n - 2)
})
console.log(fibonacci(6));
调用阶乘函数
var factorial = memoizer([1, 1], function (recur, n) {
return n * recur(n - 1)
})
console.log(factorial(6));
这样只需要提供一个基本的公式即可产生对应的函数