피보나치,메모이즈이용

메모이제이션(또는 메모이즈)이란 프로그래밍을 할 때 반복되는 결과를 메모리에 저장해서 다음에 같은 결과가 나올 때 빨리 실행하는 코딩 기법을 말함.

메모라는 객체에 대한 클로저가 있는 함수를 반환 하므로 함수 호출 결과를 "메모"에 기록 할 수 있습니다.

function fibonacci(n) {
  // TODO: 여기에 코드를 작성합니다.
  //메모이즈 피보 1
  let memo = [0, 1]; //배열로 0, 1일 때 담고 시작

  let fibo = function (n) {
    if(typeof memo[n] !== 'number') {
      memo[n] = fibo(n-2) + fibo(n-1);
    } 
    return memo[n];  
  } 

  return fibo(n);  
  
  //메모이즈 피보 2
  /*
  let memo = {} //빈 객체로 시작
  return function fibo(n) {
    if (n in memo) { return memo[n] )
    else { 
      if (n <= 1) { memo[n] = n } 
      else { memo[n] = fibo(n - 1) + fibo(n - 2) } 
      return memo[n]
    }
  }
  */


  /*기본 피보
  if(n < 2) {
    return n;
  }
  return fibonacci(n-2) + fibonacci(n-1)
  */
}

실행하면

"memo"객체에 피보나치를 계산하는 값 (n)에 대한 키가 포함되어 있으면 간단히 memo [n]을 반환합니다.

"memo"객체에 n에 대한 키가 포함되어 있지 않으면 n에 대한 피보나치 수를 계산하여 "memo"객체에 키-값 쌍으로 저장합니다.

메모화를 사용하면 재귀적 피보나치 함수를 실행하는 횟수를 줄일 수 있습니다.

좋은 웹페이지 즐겨찾기