问题:
求Fibonacci(斐波那契)数列前40个数。
分析:
这个数列有如下特点:第1,2两个数为1,1。从第三个数开始,该数是其前面两个数之和。即该数列为1,1,2,3,5,8,13,… ,用数学方式表示为:
代码:
#include <stdio.h>
int main() {
int f1 = 1,f2 = 1;
int i;
for (int i = 1; i<=20; i++) { //结束条件
printf("%12d %12d",f1,f2);
if(i%2 == 0) printf("\n"); //if语句作用是使输出4个数后换行
f1 = f1+f2;
f2 = f2+f1;
}
return 0;
}
输出结果:
改:
1、若想一行不止输出4个数,只需要调整if语句中的条件。由于每次循环是输出两个数,所以if(i%2 == 0)
是循环两次(输出4个数)换一行,那么循环三次(输出6个数)换一行就可以写成if(i%3 == 0)
,以此类推。
2、若想改变结束条件,则在for循环中修改即可。
for (int i = 1; i<=20; i++)
是循环输出直到循环20次(输出40个数)为止,若想在输出的值上作限制,此处还需考虑。
- 在此我只想到另一种方法。上面的代码也是可以改的,但是改完会更加臃肿,我能想到的只有下面的方法:
#include <stdio.h>
int main() {
int f1 = 1,f2 = 1,f3;
int i;
printf("%12d%12d",f1,f2);
for (int i = 3; ; i++) { //此处要从第三个数开始计算i
f3 = f1 + f2;
if(f3>15) break; //此处用值来限制循环
printf("%12d",f3);
if(i%6 == 0) printf("\n"); //换行在此设置
f1 = f2;
f2 = f3;
}
return 0;
}
3、也可用数组实现斐波那契数列,并且可以加上想要输出的项:
#include <stdio.h>
#define N 10000 //数组中容纳的项数
int main() {
long int a[N]={1,1};
int n;
printf("输入想求的项数:");
scanf("%d",&n);
for (int i = 2;i< n ; i++) {
a[i] = a[i-1] + a[i-2];
}
printf("%ld",a[n-1]);
return 0;
}
有好的想法欢迎留言!