사자자리
[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 main(){
int n, memo[46] = {0, 1};
scanf("%d", &n);
for (int i = 2; i <= n; i++){
memo[i] = memo[i-1] + memo[i-2];
}
printf("%d", memo[n]);
return 0;
}
#include <stdio.h>
int fibo(int n){
if (n < 2) return n;
else return fibo(n-1) + fibo(n-2);
}
int main(){
int n;
scanf("%d", &n);
printf("%d", fibo(n));
return 0;
}
위와 같이 피보나치를 재귀함수로 구현할 수 있지만, 재귀함수를 사용하면 이 문제에서는 시간 초과 또는 메모리 초과가 뜬다. 재귀함수는 호출할 때마다 스택(Stack)이 쌓이기 때문에 여러 번 호출될수록 수행 시간이 길어지고 메모리 사용량이 많아진다.
'C언어 > C언어 문제' 카테고리의 다른 글
[C언어] 백준 9996번: 한국이 그리울 땐 서버에 접속하지 (0) | 2022.08.11 |
---|---|
[C언어] 백준 1032번: 명령 프롬프트 (0) | 2022.08.11 |
[C언어] 백준 2439번: 별 찍기 - 2 (0) | 2022.08.11 |
[C언어] 백준 3060번: 욕심쟁이 돼지 (0) | 2022.08.11 |
[C언어] 백준 8595번: 히든 넘버 (0) | 2022.08.11 |
Comments