2016-12-11 3 views
1

Memoize 기능 변수가

var fibo = function (x) { 
 
    console.log(x); 
 
    if (x === 1) return 1; 
 
    if (x === 2) return 2; 
 
    return fibo(x - 1) + fibo(x - 2); 
 
}; 
 

 
// fibo = _.memoize(fibo); 
 
var fibom = _.memoize(fibo); 
 
console.log(fibom(5));
<script src="https://cdn.jsdelivr.net/lodash/4.17.2/lodash.min.js"></script>

을 변경하면 실패하는 이유는 무엇입니까 memoize 일 (주석 처리 된 코드와 같이)하지만 새로운 변수에 할당하지 않을 경우 원래의 함수 변수 이름에 할당 할 때?

답변

4

memoized 함수를 새 변수에 할당하면 재귀 호출은 여전히 ​​메모 화되지 않은 버전으로 이동합니다. 주석 처리 된 코드 에서처럼 참조를 덮어 써야합니다.

+0

오. 지금 당신이 지적 했으니 까 ... – TrueWill

1

재귀 함수가 memoized 함수 대신 원래의 메모가 아닌 함수를 호출하기 때문입니다.

fibo 함수를 할당/재정의하면 원래 함수의 fibo 호출이 새 메모 함수를 호출하고 작동합니다.