为啥要优化?
有时候递归里会有大量重复运算,肯定没必要啊,这时候缓存是个好东西。
举个代表性例子:
斐波拉契数列,由0和1开始,后面每项数值为前两数之和,
0 1 1 2 3 5 8 ......
不做优化的递归:
const fn = n => {
if (n < 2) return n
return fn(n - 1) + fn(n - 2)
}
若计算第100项,左边fn(99) + 右边fn(98),左右两边是不是都要共同计算fn(97)、fn(96)、fn(95)、fn(94)、......,现在,缓存它!!!
优化后的递归:
const fn = (n) => {
const cache = {};
const dfs = (n) => {
if (n < 2) return n;
if (cache[n]) return cache[n];
cache[n] = dfs(n - 1) + dfs(n - 2);
return cache[n];
};
};
当n越大,加上缓存的递归效率就越明显了