C 程序查找给定递归关系的第 n 项
cserver side programmingprogramming
假设我们有三个数字 a、b、c 和一个值 n。我们遵循递归公式 S(n) −
- S(1) 返回 a
- S(2) 返回 b
- S(3) 返回 c
- S(n) 返回 S(n-1) + S(n-2) + S(n-3),适用于所有 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(),它将采用a,b,c,n,
- 如果n与1相同,则:
- 返回 a
- 如果n与2相同,则:
- 返回 b
- 如果n与3相同,则:
- 返回 c
- 返回 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