이렇게 해놓고 console.log(factorial(4)); 찍어보면 아래같이 찍힘.

key {"0":4}

key {"0":3}

key {"0":2}

key {"0":1}

val 1

val 2

val 6

val 24

24


왜 if문 위쪽 로그가 4번 찍힌다음에 역방향으로 이프문에 들어가는거임?


const factorial = memorize((num) => {
if (num === 1) {
return 1;
}
return num * factorial(num - 1);
});

function memorize(func) {
let cache = {};
return function () {
let key = JSON.stringify(arguments);
console.log("key", key);
if (cache[key]) {
return cache[key];
} else {
let val = func.apply(this, arguments);
console.log("val", val);
cache[key] = val;
return val;
}
};
}

console.log(factorial(4));