fibonacci(3)은 fibonacci(2)와 fibonacci(1) (첫 번째 호출)을 호출한다.
fibonacci(2)는 fibonacci(1) (두 번째 호출)과 fibonacci(0)을 호출한다.
두 번째 호출한 fibonacci(1)은 1을 출력하고 1을 리턴한다.
fibonacci(0)은 0을 출력하고, 0을 리턴한다.
fibonacci(2)는 fibonacci(1)과 fibonacci(0)의 결과를 얻고, 1을 리턴한다.
첫 번째 호출한 fibonacci(1)은 1을 출력하고, 1을 리턴한다.
fibonacci(3)은 fibonacci(2)와 fibonacci(1)의 결과를 얻고, 2를 리턴한다.
1은 2번 출력되고, 0은 1번 출력된다. N이 주어졌을 때, fibonacci(N)을 호출했을 때, 0과 1이 각각 몇 번 출력되는지 구하는 프로그램을 작성하시오.
조건
시간 제한
메모리 제한
0.25초
128MB
작성 코드
def fib(n):
global zero, one
if n == 0:
zero += 1
return 0
elif n == 1:
one +=1
return 1
else :
return fib(n-1)+fib(n-2)
t = int(input())
for i in range(t):
zero = 0
one = 0
n = int(input())
fib(n)
print(zero, one)
이 코드로 제출한 결과, 시간초과가 뜸.
질문 게시판에서 찾아봤는데
재귀식을 사용한 피보나치 함수의 시간복잡도는 O(2^N)입니다. 그런데 해당 문제에서 N의 최대 제한이 40이므로 시간초과가 발생합니다. 다이나믹 프로그래밍을 사용하셔서 풀이하는 것을 권장드립니다.
이렇다고 함....
근데 다이나믹 프로그래밍은 아카데미에서 배운거 다 까먹어서(ㅠㅠ) 다시 공부해야하기 때문에 일단 이 문제는 패스..!