使用迭代以及数组两种方式处理Fibonacci数列
Fibonacci数列特点:
第1、2两个数为1、1,从第3个数开始,该数是其前面两个数之和。
斐波那契数列可以用一下数学形式表示:
f(1) = 1 当(n = 1)时
f(2) = 1 当(n = 2)时
...
f(n) = f(n - 1) + f(n - 2) 当(n >= 3)时
1、1、2、3、5、8、13…
方法一:迭代方式
使用f1 和 f2 两个迭代变量,使用循环处理,在一次循环中递推出数列中后面两个数。
程序代码
#include<stdio.h>
int main(void)
{
int f1,f2,i;
f1 = 1;
f2 = 1;
for(i=1; i<=20; i++)
{
printf("%12d %12d",f1,f2); //一次循环输出两个数
if(i % 2 == 0) printf("\n"); //每输出4个数换行
f1 = f1 + f2;
f2 = f2 + f1;
}
return 0;
}
注:递推常表现为迭代,即由一个变量的原值推出它的新值(如上面程序中的f1、f2变量),或者说,不断地用一个新值代替变量的原值。
运行结果
方法二:数组方式
让每个数组元素代表斐波那契数列中的一个数,按递推方法依次求出各个数,并顺序存放在相应的数组元素中。
程序代码
#include<stdio.h>
int main(void)
{
int i;
int f[20] = {1,1}; //其余元素默认置0
for(i = 2; i < 20; i++)
f[i] = f[i-2] + f[i-1]; //从前面两个元素推导出当前元素
for(i = 0; i < 20; i++)
{
if(i % 4 == 0) printf("\n");
printf("%12d",f[i]);
}
printf("\n");
return 0;
}
运行结果
总结
从表面上看,两个程序都能正确求出并输出结果,但第一种方式顺序求出并输出各个数后,不能保存这些数据。而数组处理时,把每个数都保存在了数组中,如果想要单独输出第8个数,是很容易的,这是两种方式最大区别。