본문 바로가기

Programming/Javascript

14. Javascript 함수형 프로그래밍(5) - 피보나치 수열 구현하기

javascript logo image

 

앞서 살펴본 팩토리얼 구현 방식을 응용해, 이번엔 피보나치 수열을 함수형 프로그래밍으로 구현해보도록 하겠습니다. 

 

var fibo = function() {
    var cache = {'0' : 0, '1' : 1};

    var func = function(n) {
        var result = 0;

        if (typeof(cache[n]) === 'number') {
            result = cache[n];
        } else {
            result = cache[n] = func(n-1) + func(n-2);
        }

        return result;
    }
    return func;
}();

console.log(fibo(10));

 

유사한 방식으로 코드를 구현했습니다. 역시 cache에 캐시 값을 저장해, 수열 연산을 구현하는 즉시 실행 함수 형태와 클로저를 이용했네요. 

 

 


 

지금까지 팩토리얼 / 피보나치 수열을 함수형 프로그래밍을 통해 각각 구현해 보았습니다. 그럼 이제, 한 발 더 나아가 cache 값과 팩토리얼 또는 피보나치 수열 함수를 인자로 받는 연산용 함수를 구현해 보도록 하겠습니다. 

 

 

var cacher = function(cache, func) {
    var result = 0;

    var calculate = function(n) {
        if(typeof (cache[n]) === 'number'){
            result = cache[n];
        } else {
            result = cache[n] = func(calculate, n);
        }

        return result;
    }

    return calculate;
};

var fact = cacher({ '0' : 1}, function(func, n){
    return n * func(n-1);
});

var fibo = cacher({'0' : 0, '1' : 1}, function(func, n){
    return func(n-1) + (n-2);
});

console.log(fact(5));
console.log(fibo(5));