자료 구조와 알고리즘

피보나치 수를 구하는 함수 fib(n)을 'n이 1 이하이면 n을 반환하고, 그렇지 않으면 fib(n−1) + fib(n−2)를 반환한다'로 재귀적으로 정의했다. fib(5)를 호출했을 때 fib가 호출되는 횟수는 첫 호출을 포함하여 몇 회인가?

  1. A6회
  2. B9회
  3. C15회
정답과 해설 보기

정답: C. 15회

fib(n)의 호출 횟수를 C(n)이라 하면 C(0) = C(1) = 1, C(n) = 1 + C(n−1) + C(n−2)이므로 C(2) = 3, C(3) = 5, C(4) = 9, C(5) = 15입니다. 같은 값을 몇 번이고 다시 계산하기 때문에 횟수는 n에 대해 지수적으로 늘어나며, fib(30)에서는 약 269만 회가 됩니다. 계산한 값을 표에 기억해 두는 메모이제이션(동적 계획법)을 사용하면 계산은 fib(0)~fib(5)의 6가지로 끝나고, 호출도 9회(2n − 1)로 줄어듭니다. 6회는 서로 다른 인수의 수, 9회는 메모이제이션을 한 경우의 호출 횟수입니다.

이 분야 연습하기 분야로 돌아가기

자료 구조와 알고리즘의 다른 문제

  1. 1엔, 4엔, 6엔의 3종류 동전으로 8엔을 지불한다. 큰 동전부터 쓸 수 있는 만큼 쓰는 탐욕 알고리즘으로 정했을 때의 개수와 최소 개수의 관계로 올바른 것은?
  2. 용량 8인 배낭에 (무게, 가치)가 (2, 3), (3, 4), (4, 5), (5, 6)인 4개의 물건 중에서 골라 넣는다. 각 물건은 하나씩밖에 없고 나눌 수 없다. 무게의 합계가 8 이하일 때 가치 합계의 최댓값은 얼마인가?
  3. 문자열 안에서 패턴을 찾는 BM법(보이어-무어 알고리즘)의 특징으로 올바른 것은?
  4. 가변 길이 배열에서, 용량이 가득 찼을 때 원소를 추가하면 2배 용량의 영역을 새로 확보하여 모든 원소를 복사한다. 용량 1인 빈 배열에 원소를 하나씩 1,000개 추가했을 때, 복사되는 원소의 총수는?
  5. 원소 수가 많고 적재율을 0.5 정도로 유지한 해시 테이블에서, 선형 탐사의 개방 주소법이 체이닝(연결 리스트로 잇는 방법)보다 빨라지기 쉬운 이유로 가장 적절한 것은?