별의 공부 블로그 🧑🏻‍💻
728x90
728x170

문제

피보나치 수는 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은 45보다 작거나 같은 자연수이다.

 

 

출력

첫째 줄에 n번째 피보나치 수를 출력한다.

 

 

예제 입력

 10

 

예제 출력

 55

 

 

힌트

  

 

코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
int main()
{
    int n = 0, a = 0, b = 1;
 
    cin >> n;
 
    // n번 동안 a와 b를 swap하여 더한 수를 b에 저장. 
    // 0 1 1 2 3 5 8 13 21 34 ...
    for (int i = 0; i < n - 1++i) {
        int tmp = b;
        b = a + b;
        a = tmp;
    }
 
    cout << b << endl;
 
    return 0;
}
cs




- 재귀 함수를 사용하여 풀었더니 시간초과가 떠버렸다. 그래서 반복문을 이용하여 풀었다.

- 아래는 재귀 함수를 이용하여 작성했던 코드.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
int fib(int n)
{
    if (n == 0return 0;
    else if (n == 1return 1;
    else return (fib(n - 1+ fib(n - 2));
}
 
int main()
{
    int n, result;
 
    cin >> n;
    result = fib(n);
 
    cout << result << endl;
 
    return 0;
}
cs


728x90
그리드형(광고전용)
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖