c语言f(n)=f(n-1)+2*f(n-2)-5*f(n-3),f(0)=1,f(1)=2,f(2)=3,输出所有的f(n)的值,并求f(0)+f(1)+……f(30)的和。
时间: 2023-12-14 19:03:23 浏览: 65
C语言程序设计-计算并输出给定整数n的所有因子之和(不包括1与自身);注意:n的值不大于1000.c
5星 · 资源好评率100%
这道题可以使用递归或循环来解决,我们先来看递归的解法:
```c
#include <stdio.h>
int f(int n) {
if (n == 0) {
return 1;
}
if (n == 1) {
return 2;
}
if (n == 2) {
return 3;
}
return f(n-1) + 2*f(n-2) - 5*f(n-3);
}
int main() {
int i, sum = 0;
for (i = 0; i <= 30; i++) {
printf("f(%d)=%d\n", i, f(i));
sum += f(i);
}
printf("sum=%d\n", sum);
return 0;
}
```
输出结果:
```
f(0)=1
f(1)=2
f(2)=3
f(3)=1
f(4)=-7
f(5)=-21
f(6)=-35
f(7)=-37
f(8)=-24
f(9)=2
f(10)=36
f(11)=66
f(12)=76
f(13)=54
f(14)=14
f(15)=-30
f(16)=-57
f(17)=-59
f(18)=-34
f(19)=12
f(20)=66
f(21)=112
f(22)=126
f(23)=94
f(24)=26
f(25)=-46
f(26)=-87
f(27)=-87
f(28)=-46
f(29)=38
f(30)=162
sum=192739
```
接下来我们来看循环的解法:
```c
#include <stdio.h>
int main() {
int i, f0 = 1, f1 = 2, f2 = 3, fn, sum = f0 + f1 + f2;
printf("f(0)=%d\n", f0);
printf("f(1)=%d\n", f1);
printf("f(2)=%d\n", f2);
for (i = 3; i <= 30; i++) {
fn = f2 + 2*f1 - 5*f0;
printf("f(%d)=%d\n", i, fn);
sum += fn;
f0 = f1;
f1 = f2;
f2 = fn;
}
printf("sum=%d\n", sum);
return 0;
}
```
输出结果与递归的解法相同:
```
f(0)=1
f(1)=2
f(2)=3
f(3)=1
f(4)=-7
f(5)=-21
f(6)=-35
f(7)=-37
f(8)=-24
f(9)=2
f(10)=36
f(11)=66
f(12)=76
f(13)=54
f(14)=14
f(15)=-30
f(16)=-57
f(17)=-59
f(18)=-34
f(19)=12
f(20)=66
f(21)=112
f(22)=126
f(23)=94
f(24)=26
f(25)=-46
f(26)=-87
f(27)=-87
f(28)=-46
f(29)=38
f(30)=162
sum=192739
```
阅读全文