function memoized (fn, keymaker) {
var lookupTable = {}, key;
keymaker || (keymaker = function (args) {
return JSON.stringify(args);
});
return function () {
var key = keymaker.call(this, arguments);
console.dir(lookupTable);
return lookupTable[key] || (lookupTable[key] = fn.apply(this, arguments));
}
}
var fastFibonacci = memoized(function (n) {
if (n < 2) {
return n;
}
else {
return fastFibonacci(n-2) + fastFibonacci(n-1);
}
});
fastFibonacci(1000);
저위에 캐쉬를 JSON을줘서 프로퍼티 이름이 {0:1} 이런식으로 들어가니 헷갈렷내
인자를 그냥 룩업테이블 키값으로 박는거네
리턴문에 || 가 들어가니 빡시긴함. 그런데 재귀함수중에 더 개같은거 많다.
참고로 ||가 어려운 문제인 줄 모르는 애들은 자바스크립트에서 A||B를 몰라서 그런거임. 이건 다른언어에서 if문과 동일하게 작동한다. 참이면 A가 리턴되고, 거짓이면 B가 리턴되는데, 재귀함수에서는 참, 거짓이 바로 안나옴. 몇 번 루프를 돌아야 참, 거짓이 나오는 것이 있음. 그러니 모든 경우의 수를 이해해야함