[英]How can I add up the sequence?
#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个数的output应该是这样的
输入 / output = 0/0、1/1、2/4、4/22
我发现 sum() 可以写成
f(0)x5 + f(1)x4 + f(2)x3 + f(3)x2 + f(4)x1,如果 n 为 4。
有没有办法通过递归来做到这一点?
根据你的公式,output,你想要一个递归的解决方案,我写了一个代码。 它正在使用您的输入,我希望其他输入也能正常工作。
#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) {
int total=f(x);
if (x == 0)
return 0;
else{
total += sum(x-1);
return total;
}
}
int total_of_sums(int x){
int total=sum(x);
if (x==0)
return 0;
else{
total +=total_of_sums(x-1);
return total;
}
}
int main() {
int input;
scanf("%d", &input);
printf("%d", total_of_sums(input));
}
似乎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])));
}
OUTPUT
> ./a.out 0
0
> ./a.out 1
1
> ./a.out 2
4
> ./a.out 3
10
> ./a.out 4
22
>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.