[알고리즘]데일리 코딩22번

HIHI JIN·2023년 2월 15일
1

알고리즘

목록 보기
12/29
post-thumbnail

22_fibonacci

아래와 같이 정의된 피보나치 수열 중 n번째 항의 수를 리턴해야 합니다.
0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1입니다. 그 다음 2번째 피보나치 수부터는 바로 직전의 두 피보나치 수의 합으로 정의합니다.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...

Advanced
피보나치 수열을 구하는 효율적인 알고리즘(O(N))이 존재합니다. 재귀함수의 호출을 직접 관찰하여 비효율이 있는지 확인해 보시기 바랍니다.

/*function fibonacci(n) {
  // TODO: 여기에 코드를 작성합니다.
  if(n===0) return 0;
  if(n===1) return 1;
  return fibonacci(n-1)+fibonacci(n-2);
} 처음 코드 : 중복으로 피보나치 함수가 불러와지므로 재귀함수 호출의 횟수가 많아진다.
*/

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); //memo배열의 인덱스에 값을 불러와준다.
};
profile
신입 프론트엔드 웹 개발자입니다.

1개의 댓글

comment-user-thumbnail
2023년 2월 23일

피보나치 수열 오랜만에 들어보는데 이렇게 코딩한 것으로 보니 더 새롭네요!!

답글 달기