백준(C언어) 풀이/수학

백준(C) 2747번 피보나치 수 풀이

개발윗미 2021. 9. 20. 11:13

C로 구현한 2747번 피보나치 수 문제 풀이입니다.

 

https://www.acmicpc.net/problem/2747

 

2747번: 피보나치 수

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가

www.acmicpc.net


#include <stdio.h>

int arr[46] = {0,};

int fibo(int x) {
	if(x == 1 || x == 2)
		return 1;
	if(arr[x] != 0)
		return arr[x];
	return arr[x] = fibo(x - 1) + fibo(x - 2);
}
int main() {
	int n;
	scanf("%d", &n);
	printf("%d", fibo(n));
}

 

문제에서 요구하는 바와 같이 특정번째의 피보나치 수를 구한다.

 

fibo( ) 메소드에서 전달받은 값이 1 혹은 2 라면 1을 리턴한다. 피보나치 수의 첫번째, 두번째 값은 1이기 때문이다.

 

또한, 전달받은 값이 1 혹은 2가 아니라면 배열 d의 해당 인덱스 값이 0이 아닌지 판별하여 0이 아니라면 그 값을 리턴한다.

 

위 조건도 만족하지 않는다면 재귀 호출하는 방식으로 x - 1 번째 수와 x - 2 번째 수를 더하여 리턴한다.