함수 호출 결과를 저장하여 동일한 입력에 대해 어플리케이션의 속도를 높이는 최적화 기법
function fibonacci(n, memo) {
memo = memo || {}
// 캐시가 저장되는 공간. 함수가 호출되었을 때 인자로 memo를 받았는지 확인
// 받았다면 -> 사용을 위해 초기화
// 안받았다면 -> 빈 객체 생성
if (memo[n]) {
return memo[n]
}
// 현재 인덱스 n에 대해 캐시에 저장된 값이 있는지 확인하고, 있으면 값 반환
if (n <= 1) {
return 1
}
// 탈출 조건 설정
return memo[n] = fibonacci(n-1, memo) + fibonacci(n-2, memo)
// 함수를 재귀 호출할 때 캐시에 저장된 값을 각 함수에 전달
// 즉, 이전에 평가되어 저장된 값은 다시 계산하지 않고 memo에서 값을 검색
}
Understanding Memoization In JavaScript
https://www.digitalocean.com/community/tutorials/understanding-memoization-in-javascript#case-study-the-fibonacci-sequence