递归缓存技术,缓存机制Memoization
先看一下代码:
再看一下执行时间:
可以看出第一个阶乘的执行时间是3ms,后面的由于缓存了之前的计算结果,所以直接返回结果。
原理就是缓存之前的计算,避免重复计算。关键在于建立缓存数组。
可以看一下执行第一行调用的时候memfactorial.cache是什么样子的
从这张图即可得出结论,为何需要缓存。即避免重复计算。
代码:
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]; }
尾递归优化结果:
常规递归结果: