Giả sử chúng ta có ba số a, b, c và một giá trị n. Chúng tôi tuân theo công thức lặp lại S (n) -
- S (1) trả về một
- S (2) trả về b
- S (3) trả về c
- S (n) trả về S (n-1) + S (n-2) + S (n-3) với mọi n> 3.
Chúng ta sẽ phải tìm ra số hạng thứ n bằng cách theo dõi sự lặp lại này.
Vì vậy, nếu đầu vào là a =5, b =2, c =3, n =6, thì đầu ra sẽ là 28 vì -
- 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
- vậy bây giờ S (5) =10 + 3 + 2 =15
- và S (6) =15 + 10 + 3 =28
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
Xác định một hàm giải quyết (), điều này sẽ nhận a, b, c, n,
- nếu n giống 1, thì:
- trả về một
- nếu n giống 2, thì:
- trả lại b
- nếu n giống 3, thì:
- trả lại c
- trả về giải quyết ((a, b, c, n - 1) + giải quyết (a, b, c, n - 2) + giải quyết (a, b, c, n - 3))
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#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); }
Đầu vào
5, 2, 3, 6
Đầu ra
28