int fibonacci(int n) {
if (n == 0) {
printf("0");
return 0;
} else if (n == 1) {
printf("1");
return 1;
} else {
return fibonacci(n‐1) + fibonacci(n‐2);
}
}
위는 n번째 피보나치 수를 구하는 함수이다.
이렇게 재귀호출을 이용하면 6번째 피보나치 수를 구하는 걸 예시로 들었을 때
fibo(6)은 fibo(4)와 fibo(5)를 호출하고 fibo(5)는 fibo(3)과 fibo(4)를 호출하는 과정을 반복하게 되는데
이 과정에서 fibo(4)는 2번 호출되고 밑으로 내려갈 수록 같은 계산이 여러번 이루어지게 된다.
그래서 동적 계획법은 불필요한 동일 연산을 줄이기 위해 한번 계산한 함수의 값을 저장한다.
int fibonacci(int n) {
if (n == 0) {
fibo[0] = 0;
}
else if (n == 1) {
fibo[1] = 1;
}
else {
fibo[n] = fibonacci(n - 1) + fibonacci(n - 2);
}
return fibo[n];
}
위 코드처럼 fibo배열에 피보나치 수를 연산한 것을 저장하면 한번 계산한 fibo(3),fibo(4),fibo(5)... 등은
다시 계산할 필요가 없다.
'백준' 카테고리의 다른 글
| [백준] 10828번 - 스택 기본 (0) | 2022.01.09 |
|---|---|
| [백준] 11047번, 1931번 - 그리디 알고리즘 (0) | 2021.12.31 |
| [백준] 15649번 - 백트래킹 알고리즘, DFS (0) | 2021.12.29 |
| [백준] 10989번 - 카운팅 정렬 (0) | 2021.12.28 |
| [백준] 2750번 - 선택정렬,버블정렬,삽입정렬 (0) | 2021.12.28 |