문제
피보나치 수는 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번째 피보나치 수를 출력한다.
풀이
재귀 함수를 이용하여 피보나치 수를 구하는 문제이다.
피보나치 수는 fibo(n) = fibo(n-1) + fibo(n-2)로 구할 수 있으며, fibo(0)과 fibo(1)은 각각 0과 1의 값을 가진다.
재귀 함수로 구하게 되면 시간 복잡도가 O(2^n)이 나오게 되므로 수가 커지게 되면 하루 종일 걸린다.. 사용하지 말자
문제에서는 n의 크기가 최대 20이기 때문에 재귀 함수를 사용하더라도 금방 구할 수 있다!
코드
더보기
#include <iostream>
using namespace std;
int fibo(int n);
int main() {
int n;
cin >> n;
cout << fibo(n);
}
int fibo(int n) {
if (n <= 1)
return n;
return fibo(n - 1) + fibo(n - 2);
}
'Old > 백준' 카테고리의 다른 글
백준 1918번 후위 표기식 // C++ (0) | 2020.02.22 |
---|---|
백준 15649번 N과 M (1) // C++ (0) | 2020.02.19 |
백준 5639번 이진 검색 트리 // C++ (0) | 2020.02.19 |
백준 9375번 패션왕 신해빈 // C++ (0) | 2020.02.19 |
백준 11652번 카드 // C++ (0) | 2020.02.19 |