codes/daily coding

22_fibonacci

Mia_ 2022. 12. 20. 10:54
function fibonacci(n) {
  // Q. 피보나치 수열 중 n 번째 항의 수를 리턴
  // ! 재귀함수를 이용해 구현
  // fibonacci(0) --> 0, fibonacci(1) --->1
  // fibonacci(2) --> fibonacci(0) + fibanacci(1) ---> 1
  // fibonacci(3) ---> fibaonacci(2) + fibaonacci(1) ---> 1 + 1 --> 2
  // finobacci(4) ---> fibaonacci(3) + fibaonacci(2) ---> 2 + 1 --> 3
  // fibonacci(5) ---> fibaonacci(4) +  fibaonacci(3) ---> 3 + 2 --> 5 
  // fibaonacci(n) = fibaonacci(n-1) + fibaonacci(n-2)

  if(n === 0){ return 0 }
  if(n < 2){ return 1 }
    return fibonacci(n-1) + fibonacci(n-2)

}

Dynamic with memorization : 0(N)

이미 해결한 문제의 정답을 따로 기록해 주고, 다시 해결하지 않는 기법

동일한 문제가 중복으로 계산되는 것이 보임

let fibonacci = function (n) {
  const memo = [0, 1];
  const aux = (n) => {
    // 이미 해결한 적이 있으면, 메모해둔 정답을 리턴한다.
    if (memo[n] !== undefined) return memo[n];
    // 새롭게 풀어야하는 경우, 문제를 풀고 메모해둔다.
    memo[n] = aux(n - 1) + aux(n - 2);
    return memo[n];
  };
  return aux(n);
};