私は現在メモ帳について学んでいます。私は簡単な練習として、フィボナッチでメモを作成しました。しかし、私はメモをつけた関数の名前を変更しないと、名前を変更したときより完了までに時間がかかります。コードを見てください。Memoizeが期待どおりに機能していませんか?
これは正しく動作せず、正しくキャッシュされません。
function memoize(func) {
const cache = {};
return function(args) {
const cacheKeys = Object.keys(cache).map(el => +el);
if (cacheKeys.includes(args)) {
return cache[args];
}
cache[args] = func(args);
return cache[args];
};
}
function wrapped_fibonacci(n) {
if (n <= 2) {
return 1;
}
return wrapped_fibonacci(n - 1) + wrapped_fibonacci(n - 2);
}
const fibonacci = memoize(wrapped_fibonacci); // <== I do not rename the function.
for (let i = 1; i <= 40; i++) {
console.log(fibonacci(i));
}
しかし、私はこのようなコードを書くとき。それは正しく動作し、performantです
function memoize(func) {
const cache = {};
return function(args) {
const cacheKeys = Object.keys(cache).map(el => +el);
if (cacheKeys.includes(args)) {
return cache[args];
}
cache[args] = func(args);
return cache[args];
};
}
function fibonacci(n) {
if (n <= 2) {
return 1;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
fibonacci = memoize(fibonacci); //<== I rename the function
for (let i = 1; i <= 40; i++) {
console.log(fibonacci(i));
}
ご覧のとおりです。私は関数名を再割り当てしました。 node.jsでこれらのテストを行っています。v8.3.0
最初の結果はそのままです。
time node fib.js
real 0m2.413s │~
user 0m2.400s │~
sys 0m0.008s
第二の結果は、この上でいくつかの光を当てることができ、このような
time node fib.js
real 0m0.263s │~
user 0m0.252s │~
sys 0m0.008s
DIFFERENCE 1.8S THATS誰でもと行きますか?
この完璧な理にかなって!あなたのinsiteありがとう! – Nate