728x90
https://www.acmicpc.net/problem/24416
문제해석
여기서 피보나치 수는 첫째 및 둘째 항이 1이며 그 뒤의 모든 항은 바로 앞 두 항의 합인수열입니다. 처음 여섯 항은 각각 1, 1, 2, 3, 5, 8이다. 편의상 0번째 항을 0으로 두기도 합니다. => f[n]={0,1,1}
문제에서 제시한 재귀함수와 동적프로그램함수에 실행횟수를 계산해주는 변수를 추가해 작성합니다.
소스코드 & 문제풀이
#include<stdio.h>
int f[41] = { 0,1,1 }; //0번째:0, 첫번째:1, 두번째:1
int cnt1 = 0; //피보나치 수 계산에서 실행 횟수를 셉니다
int cnt2 = 0;
int fib(int n) { //재귀함수
if (n == 1 || n == 2) {
cnt1++;
return 1;
}
else return (fib(n - 1) + fib(n - 2)); //n이 1,2가 아닐 시 자기자신을 호출해 계산합니다
}
int fibo(int n) { //동적 프로그래밍
for (int i = 3; i <= n; i++) { //3번째 항부터 반복문을 실행합니다
cnt2++;
f[i] = f[i - 1] + f[i - 2];
}
return f[n];
}
int main() {
int n;
scanf("%d", &n);
fib(n); //재귀함수를 호출합니다
fibo(n); //동적프로그래밍을 호출합니다
printf("%d %d", cnt1, cnt2); //각각의 함수 호출 횟수를 출력합니다
return 0;
}
예제 입출력 결과
728x90
'백준(BaekJoon)' 카테고리의 다른 글
[BaekJoon/C] No.1010 : 다리 놓기 (1) | 2024.09.27 |
---|---|
[BaekJoon/C] No.1149 : RGB거리 (0) | 2024.09.13 |
[BaekJoon/C] No.11729 : 하노이 탑 이동 순서 (0) | 2024.08.29 |
[BaekJoon/C] No.27433 : 팩토리얼 2 (0) | 2024.08.29 |
[BaekJoon/C] No.11651 : 좌표 정렬하기 2 (0) | 2024.08.20 |