728x90
문제
피보나치 수는 0과 1로 시작한다.
0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그
다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.
이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.
n=17일때 까지 피보나치 수를 써보면 다음과 같다.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597
n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 n이 주어진다. n은 20보다 작거나 같은 자연수 또는 0이다.
출력
첫째 줄에 n번째 피보나치 수를 출력한다.
아이디어
다이나믹 프로그래밍의 대표예제 - 피보나치 수열
간단한 재귀함수로 표현 가능하다.
여기서 0번째는 값이 0 이고 1번째, 2번째 값은 1이라서 그건 따로 종료조건으로 빼준다.
재귀함수는 n이 3일때부터 시작.
참고
문제에서 N의 크기가 20보다 작거나 같다고 했기 때문에 재귀함수를 써도 상관없지만,
만약 N이 100가까이 되는 수라면, 수행시간이 엄청 오래걸릴 수 있다!
이럴경우, 이전의 결과를 메모리에 저장해두고 필요할 때마다 꺼내쓰는 방식이 더 효율적이다.(메모지에이션)
코드
n = int(input())
def fibo(n):
if n == 0 :
return 0
elif n==1 or n==2:
return 1
return fibo(n-2) + fibo(n-1)
print(fibo(n))
반응형
'Study > Baekjoon Online Judge' 카테고리의 다른 글
[백준/파이썬] 4153. 직각삼각형 (0) | 2021.07.07 |
---|---|
[백준/파이썬] 1978. 소수 찾기 (2) | 2021.07.03 |
[백준/파이썬] 1463. 1로 만들기 (0) | 2021.03.17 |
[백준/파이썬] 2839. 설탕배달 (0) | 2021.03.06 |
Baekjoon Online Judge (0) | 2020.10.30 |