Two Sum
两数之和
参考自书籍<<JavaScript语言精粹>>第四章最后一节:记忆
函数可以将先前操作的结果记录在某个 对象 里,从而避免无谓的重复计算.这种优化被称为记忆.
demo:
// 记忆体
/**
* 记忆体
* @param {Array} memo 记忆数组
* @param {Function} formula 方法体
*/
let memoizer = function (memo, formula) {
let recur = function (n) {
let result = memo[n];
if (typeof result !== 'number') {
result = formula(recur, n);
memo[n] = result;
}
return result;
};
return recur;
};
use:
/**
* 斐波那契数列
* [0, 1, 1, 2, 3, 5, 8, ......]
*/
let fibonacci = memoizer([0, 1], function (recur, n) {
return recur(n - 1) + recur(n - 2);
});