#include <stdio.h>
int f(int n) {
if (n == 0)
return 0;
else if (n == 1)
return 1;
else if (n == 2)
return 2;
else
return f(n - 3) + f(n - 2) + f(n - 1);
}
int sum(int x) {
if (x == 0)
return f(0);
else
return f(x) + sum(x - 1) + sum(x-2);
}
int main() {
int input;
scanf_s("%d", &input);
printf("%d", sum(input));
}Fn是定义为
f0 = 0,f1 = 1,f2 = 2,f3 = f2 + f1 + f0,fn = fn-3 + fn-2 + fn-1
sum()定义为
和(N)= (f0) + (f0+f1) + (f0 + f1 + f2) +.+ (f0 + f1 +.+ fn)
输入n个数字的输出应该如下所示
输入/输出= 0/0、1/1、2/4、4/22
我已经计算出sum()可以写成
f(0)x5 + f(1)x4 + f(2)x3 + f(3)x2 + f( 4 )x1
有什么方法可以通过递归来完成吗?
发布于 2020-05-13 06:42:24
sum()的递归辅助函数似乎可以解决这个问题:
#include <stdio.h>
#include <stdlib.h>
int f(int n) {
if (n < 3)
return n;
return f(n - 3) + f(n - 2) + f(n - 1);
}
int sum_recursive(int n, int x) {
if (x == 1)
return f(n);
return f(n) * x + sum_recursive(n + 1, x - 1);
}
int sum(int x) {
return sum_recursive(0, x + 1);
}
int main(int argc, char *argv[]) {
printf("%d\n", sum(atoi(argv[1])));
}输出
> ./a.out 0
0
> ./a.out 1
1
> ./a.out 2
4
> ./a.out 3
10
> ./a.out 4
22
>https://stackoverflow.com/questions/61767424
复制相似问题