var lookup = {};
function memoized(n) {
if(n <= 1) { return 1; }
if(lookup[n]) {
return lookup[n];
}
lookup[n] = n * memoized(n - 1);
return lookup[n];
}
对比
function fact(n) {
if(n <= 1) { return 1; }
return n * fact(n-1);
}
如果我们称事实(3)
使用第二种方法,我们得到 --> 3 * (2 * (1))
将结果存储在哈希中的效率增益是多少。是否仅适用于对同一函数的后续调用?如果您只调用该函数一次,我看不出您将如何获得任何收益。
使用记忆的斐波那契函数,即使只有一个函数调用,仍然可以提高效率。要获得第 n 个斐波那契数,如果您不记忆,您将在每个 fib(n) 上重复 fib(n-1) 和 fib(n-2) 的计算。我没有在阶乘函数中看到这种情况。