728x90
피보나치 수열
피보나치 수열이란 첫 번째 항과 두 번째 항이 1이고, 세 번째 항부터는 바로 앞의 두 항의 합으로 정의된 수열입니다.
예를 들어서 세 번째 항은 첫 번째 항(1)과 두 번째 항(1)을 더한 2이며, 네 번째 항은 두 번째 항(1)과 세 번째 항(2)을 더한 3이 될 것입니다.
주의사항
* 파라미터로 1 이상의 자연수 n을 받고, n번째 피보나치 수를 리턴하는 재귀 함수 fib를 쓰세요.
❧ 테스트 셋
def fib(n):
# Code
# Test : print fib(1) to fib(10)
for i in range(1, 11):
print(fib(i))
❧ 출력 예시
1
1
2
3
5
8
13
21
34
55
❧ 정답
def fib(n):
if (n < 3):
return 1
else:
return fib(n-2) + fib(n-1)
# Code
# Test
for i in range(1, 11):
print(fib(i))
1️⃣ 재귀 함수 문제 풀이
* Recursive case: 현 문제가 너무 커서, 같은 형태의 더 작은 부분 문제를 재귀적으로 푸는 경우
* Base case: 이미 문제가 충분히 작아서, 더 작은 부분 문제로 나누지 않고도 바로 답을 알 수 있는 경우
2️⃣ 시간 복잡도
* base case, 두 번의 재귀적 호출
* fib 호출 한 번의 시간 복잡도는 O(1)
* 매 호출마다 fib 함수가 재귀적으로 두 번 더 호출(fib(2) · fib(1) 이전까지 두 배로 늘어남)
* fib(n)의 시간 복잡도 : O(2n)
728x90
'📊 Algorithm > Algorithm PS' 카테고리의 다른 글
[알고리즘 일기] 6. 선형 탐색 구현 알고리즘 (0) | 2021.05.06 |
---|---|
[알고리즘 일기] 5. 하노이의 탑 (0) | 2021.05.05 |
[알고리즘 일기] 4. 이진 탐색 구현 알고리즘(재귀) (0) | 2021.05.04 |
[알고리즘 일기] 3. 숫자 합, 자릿수 합 (0) | 2021.05.03 |
[알고리즘 일기 - 파이썬] 1. 팔린드롬 문제 (0) | 2021.05.01 |