递归优化之缓存结果(js)

为啥要优化?

有时候递归里会有大量重复运算,肯定没必要啊,这时候缓存是个好东西。

举个代表性例子:

斐波拉契数列,由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越大,加上缓存的递归效率就越明显了

猜你喜欢

转载自blog.csdn.net/qq_43119912/article/details/125788296