코딩 테스트/알고리즘 공부

피보나치 수열

fullfish 2022. 9. 9. 00:21

0, 1, 1, 2, 3, 5, 8...

 

//! 재귀함수를 이용한 0(2^N) 방법
function fibonacci(num) {
  if (num <= 1) return num;
  return fibonacci(num - 1) + fibonacci(num - 2);
}
console.time();
console.log(fibonacci(45));
console.timeEnd();

//! 객체 메모리 이용
function fibonacci2(n, memo = { 0: 0, 1: 1 }) {
  if (n in memo) {
    return memo[n];
  } else {
    memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo);
    return memo[n];
  }
}
console.time();
console.log(fibonacci2(45));
console.timeEnd();

//! 반복문을 이용한 0(N) 방법
function fibonacci3(n) {
  let a = 1,
    b = 1,
    result = 1;
  for (let i = 3; i <= n; i++) {
    result = a + b;
    a = b;
    b = result;
  }
  return result;
}
console.time();
console.log(fibonacci3(45));
console.timeEnd();

//! 배열 이용
function fibonacci4(n) {
  let fiboArr = [0, 1];
  for (let i = 2; i <= n; i++) {
    fiboArr.push(fiboArr[i - 1] + fiboArr[i - 2]);
  }
  return fiboArr[n];
}
console.time();
console.log(fibonacci4(45));
console.timeEnd();

 

순서대로의 결과값

1134903170
default: 8.999s
1134903170
default: 8.999s
1134903170
default: 0.225ms
1134903170
default: 0.193ms

'코딩 테스트 > 알고리즘 공부' 카테고리의 다른 글

팩토리얼 factorial  (0) 2022.12.25
순열, 중복순열, 조합, 중복조합  (0) 2022.12.25
수학적 지식 모음  (0) 2022.09.08
약수 구하기  (0) 2022.09.05
최소공배수(lcm)  (0) 2022.09.05