@calmzhu 你说的对,这里只是缓存了部分计算结果,递归到代理。
我的初衷是递归的时候原函数先尝试获取缓存,没有命中才真正执行计算,所以自以为每次递归原函数也会经过代理。
但我尝试递归代理也没能真正读取到,感觉代理不适合这个场景。
目前成功的方式是不用代理,将缓存和功能实现在原函数内部耦合。
“`js
let count = 0;
const fibonacci = (N, cache = new Map()) => {
cache.set(0, 1).set(1, 1);
if (N <= 1) {
return 1;
}
const memorize = n => {
if (cache.has(n)) {
count++;
return cache.get(n);
}
return cache.set(n, memorize(n – 1) + memorize(n – 2)).get(n);
};
return memorize(N);
};
console.log(fibonacci(1));
console.log(fibonacci(2));
console.log(fibonacci(3));
console.log(fibonacci(4));
console.log(fibonacci(5));
console.log(‘缓存命中数:’, count);
“`