세 개의 숫자 a, b, c와 값 n이 있다고 가정합니다. 우리는 반복 공식 S(n) −
를 따릅니다.- S(1)은 를 반환합니다.
- S(2)는 b를 반환합니다.
- S(3)은 c를 반환합니다.
- S(n)은 모든 n> 3에 대해 S(n-1) + S(n-2) + S(n-3)를 반환합니다.
이 반복을 따라 n항을 찾아야 합니다.
따라서 입력이 a =5, b =2, c =3, n =6과 같으면 출력은 −
이기 때문에 28이 됩니다.- S(6) =S(5) + S(4) + S(3)
- S(5) =S(4) + S(3) + S(2)
- S(4) =S(3) + S(2) + S(1) =3 + 2 + 5 =10
- 이제 S(5) =10 + 3 + 2 =15
- 및 S(6) =15 + 10 + 3 =28
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
solve() 함수를 정의하면, b, c, n,
- n이 1과 같으면 다음과 같습니다.
- 반환
- n이 2와 같으면 다음과 같습니다.
- 반환 b
- n이 3과 같으면 다음과 같습니다.
- 반환 c
- return solve((a, b, c, n - 1) + solve(a, b, c, n - 2) + solve(a, b, c, n - 3))
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <stdio.h> int solve(int a, int b, int c, int n){ if(n == 1) return a; if(n == 2) return b; if(n == 3) return c; return solve(a, b, c, n-1) + solve(a, b, c, n-2) + solve(a, b, c, n-3); } int main(){ int a = 5, b = 2, c = 3, n = 6; int res = solve(a, b, c, n); printf("%d", res); }
입력
5, 2, 3, 6
출력
28