파이썬, 피보나치 수 구하기 (메모이제이션 + 재귀호출 방식)
글. 오상문 sualchi@daum.net
n 번째 피보나치 수를 구할 때 기존에 구한 값은 리스트에 저장해서 재활용하는 메모이제이션 방식을 사용한 코드입니다. fibo 리스트는 인덱스 1을 제외하고 모두 0으로 초기화하고 fibo[1]만 1로 초기화합니다. 처음에 피보나치 수를 구할 때는 계산을 통해 진행하지만 이후에 다시 피보나치 함수를 수행할 때는 이미 구해진 값이 fibo 리스트에 있으면 그 값을 재활용하므로 속도가 빨라집니다.
#--------------------------------------------------
fibo = [0 for i in range(1000001)]
fibo[1] = 1
def fast_f(n):
if n==0 or n==1:
return n
if fibo[n] == 0:
fibo[n] = fast_f(n-1) + fast_f(n-2)
return fibo[n]
def fibonacci(n):
if n<=0 or n==1:
return n
return fast_f(n)
#---------------------------------------
for n in range(1,21):
print("%3i: %i" %(n, fibonacci(n)))
print("...")
for n in range(90,101):
print("%3i: %i" %(n, fibonacci(n)))
[실행 결과]
1: 1
2: 1
3: 2
4: 3
5: 5
6: 8
7: 13
8: 21
9: 34
10: 55
11: 89
12: 144
13: 233
14: 377
15: 610
16: 987
17: 1597
18: 2584
19: 4181
20: 6765
...
90: 2880067194370816120
91: 4660046610375530309
92: 7540113804746346429
93: 12200160415121876738
94: 19740274219868223167
95: 31940434634990099905
96: 51680708854858323072
97: 83621143489848422977
98: 135301852344706746049
99: 218922995834555169026
100: 354224848179261915075
'Python 기초' 카테고리의 다른 글
파이썬, 124 나라의 숫자 (0) | 2019.10.10 |
---|---|
파이썬, 가장 큰 정사각형 넓이 구하기 (0) | 2019.10.09 |
파이썬, 하샤드 수인가 (0) | 2019.10.08 |
파이썬, 콜라츠 추측 (Collatz conjecture) 문제 (0) | 2019.10.08 |
파이썬, 리스트 안의 자료를 모두 삭제하기 (0) | 2019.10.06 |