【发布时间】:2020-05-13 14:42:24
【问题描述】:
#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() 定义为
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,如果 n 为 4。
有没有办法通过递归来做到这一点?
【问题讨论】:
-
你只想总结整个序列?