Coplit

[ Coplit ] - 22_fibonacci 문제 풀이

_moda 2023. 4. 21. 10:35
문제
아래와 같이 정의된 피보나치 수열 중 n번째 항의 수를 리턴해야 합니다.
0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1입니다. 그 다음 2번째 피보나치 수부터는
바로 직전의 두 피보나치 수의 합으로 정의합니다.

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...
입력
인자 1 : n
number 타입의 n (n은 0 이상의 정수)
출력
number 타입을 리턴해야 합니다.
주의 사항
재귀함수를 이용해 구현해야 합니다.
반복문(for, while) 사용은 금지됩니다.
함수 fibonacci가 반드시 재귀함수일 필요는 없습니다.

 

코드 / 풀이

function fibonacci(n) {
  let newArr = [0, 1]; 
  const fib = (n) => {
    if (newArr[n] !== undefined){ 
      return newArr[n]; 
    }
    newArr[n] = fib(n - 1) + fib(n - 2); 
    return newArr[n];
  }; 
  return fib(n); 
}

1. 먼저, newArr 배열을 선언합니다.

이 배열은 각 항목이 피보나치 수열의 n번째 항목까지의 값이 저장되는 배열입니다.

 

2. 여기서 newArr[0]은 0, newArr[1]은 1로 초기화됩니다.

 

3. 다음으로, fib 함수를 정의합니다.

fib 함수는 현재 인자로 전달된 n값에 대한 피보나치 수열의 값이 이미 newArr에 저장되어 있는지 확인합니다.

 

4. 만약 newArr[n]이 이미 정의되어 있다면, newArr[n]을 반환합니다.

 

5. 만약 newArr[n]이 아직 정의되지 않았다면, newArr[n]을 fib(n - 1) + fib(n - 2)로 계산하고, newArr[n]에 해당 값을 저장한 후 반환합니다.

 

6. 마지막으로, fibonacci 함수는 n에 대한 fib(n)의 값을 반환합니다.

 

이렇게 fib 함수를 재귀적으로 호출하면서 이전에 계산한 값을 newArr에 저장하여 중복 계산을 피함으로써, 효율적으로 피보나치 수열의 값을 구할 수 있습니다.