https://www.acmicpc.net/problem/10870
이 문제는 n을 주면, n번째 피보나치 수를 구하는 문제이다.
우선 이전에 풀었던 문제인 팩토리얼 2를 응용해서 풀거기 때문에, unsigned long int는 그대로 사용하겠다.
우선 기본 라이브러리를 불러온다.
#include <stdio.h>
재귀 함수를 이용해서 풀거기 때문에, fibonaci함수를 생성한다. (a와 b는 이전에 있던 숫자들이다.)(만약 C++이라면, 첫 a와 b를 기본 값으로 설정할 수 있다. a = 0, b = 0)
unsigned long int fibonaci(int n, int a, int b);
함수 내에서는 n이 0이면 0을 리턴하고, n이 3보다 작으면 a+b를 리턴하고, 전부 아니면 fibonaci(n-1, b, a+b)를 리턴한다.
if (n == 0){
return 0;
}else if (n < 3){
return a+b;
}else {
return fibonaci(n-1, b, a+b);
}
만약 n이 4라면, (a와 b는 추후 계산을 위해서 필요한 것이기 때문에, 각각 0과 1로 고정하겠다.)
n은 0이 아니고, 3보다 작지 않기 때문에, fibonaci(n-1, b, a+b)를 리턴한다. 리턴하기 전, fibonaci(n-1, b, a+b)를 계산한다.
fibonaci(n-1, a, b)(n=3, a=1, b = 1)에서 n은 0이 아니고, 3보다 작지 않기 때문에 fibonaci(n-1, b, a+b)를 리턴한다. 리턴하기 전, fibonaci(n-1, b, a+b)를 계산한다.
fibonaci(n-1, a, b)(n=2, a=1, b = 2)에서 n은 0이 아니지만, 3보다 작기 때문에 a+b = 3을 리턴한다.
fibonaci(n-1, a, b)(n=3, a=1, b=1)에서 fibonaci(2, 1, 2) = 3의 값을 그대로 리턴한다.
fibonaci(n-1, a, b)(n=4, a=0, b=1)에서 fibonaci(3, 1, 1) = 3의 값을 그대로 리턴한다.
따라서 n이 4일때 피보나치의 값은 3이다.
main함수에서 scanf로 n을 입력 받고, printf로 피보나치 함수의 결과를 출력한다.
int main(){
int n;
scanf("%d", &n);
printf("%lu", fibonaci(n, 0, 1));
}
최종 코드
#include <stdio.h>
unsigned long int fibonaci(int n, int a, int b){
if (n == 0){
return 0;
}else if (n < 3){
return a+b;
}else {
return fibonaci(n-1, b, a+b);
}
}
int main(){
int n;
scanf("%d", &n);
printf("%lu", fibonaci(n, 0, 1));
}
'백준 C, C++ 문제' 카테고리의 다른 글
| 25501번, 재귀의 귀재 (0) | 2025.04.13 |
|---|---|
| 27433번, 팩토리얼 2 (0) | 2025.04.13 |
| 10871번, X보다 작은 수 (0) | 2025.04.08 |
| 10807번, 개수 세기 (0) | 2025.04.08 |
| 10818번, 최소, 최대 (0) | 2025.04.07 |