递归缓存技术,缓存机制Memoization

递归缓存技术,缓存机制Memoization

先看一下代码:

递归缓存技术,缓存机制Memoization

再看一下执行时间:

递归缓存技术,缓存机制Memoization

可以看出第一个阶乘的执行时间是3ms,后面的由于缓存了之前的计算结果,所以直接返回结果。

原理就是缓存之前的计算,避免重复计算。关键在于建立缓存数组。

可以看一下执行第一行调用的时候memfactorial.cache是什么样子的

递归缓存技术,缓存机制Memoization

从这张图即可得出结论,为何需要缓存。即避免重复计算。

代码:

function memfactorial(n) {
    if(!memfactorial.cache) {
        memfactorial.cache = [1,1];
    }

    if(!memfactorial.cache[n]) {
        memfactorial.cache[n] = n * memfactorial(n-1);
    }

    return memfactorial.cache[n];
}

 尾递归优化结果:

递归缓存技术,缓存机制Memoization

递归缓存技术,缓存机制Memoization

常规递归结果:
递归缓存技术,缓存机制Memoization

递归缓存技术,缓存机制Memoization

posted @ 2017-03-28 00:20 黑客PK 阅读(...) 评论(...) 编辑 收藏