#재귀함수를 이용한 피보나치
def fibo1(n):
if n < 3:
return 1
return fibo1(n-1) + fibo1(n-2)
#for문을 이용한 피보나치
def fibo2(n):
if n < 3 :
return 1
else:
a, b = 1, 1
for i in range(1, n):
a,b = b, a+b
return a
#메모이제이션을 이용한 피보나치
def fibo3(n):
fibList = [1, 1]
if n < 3:
return 1
else:
for i in range(2,n):
fibList.append(fibList[i-1] + fibList[i-2])
return fibList
a = int(input())
print("#재귀함수 이용")
print("n = {0} \nvalue = {1}".format(a,fibo1(a)))
print()
print("#for문 이용")
print("n = {0} \nvalue = {1}".format(a,fibo2(a)))
print()
print("#메모이제이션 이용(결과값을 리스트에 저장해 반환)")
print("n = {0} \nvalue = {1}".format(a,fibo3(a)))