核心思想:
法1:f3 = f1+f2;f1 = f2;f2 = f3;
法2:f[i] = f[i-2]+f[i-1];
代码实现:
//求前20项斐波那契数列(法1)
/*
#include<cstdio>
int main(){
int i,f1,f2,f3;
f1 = 1;
f2 = 1;
printf("%10d%10d",f1,f2);
for(i=3;i<=20;i++){
f3 = f1+f2;
printf("%10d",f3);
if(i%4==0)
printf("\n");
f1 = f2;
f2 = f3;
}
}
*/
//求前n项斐波那契数列
/*
#include<cstdio>
int main(){
int i,n,f1,f2,f3;
f1 = 1;
f2 = 1;
printf("请输入要求斐波那契数列的项数:\n");
scanf("%d",&n);
printf("%10d%10d",f1,f2);
for(i=3;i<=n;i++){
f3 = f1+f2;
printf("%10d",f3);
if(i%4==0)
printf("\n");
f1 = f2;
f2 = f3;
}
return 0;
}
*/
//求前20项斐波那契数列,用数组实现(法2)
/*
#include<cstdio>
int main(){
int i;
int f[20]={1,1};
printf("%10d%10d",f[0],f[1]);
for(i=2;i<20;i++){
f[i] = f[i-2]+f[i-1];
printf("%10d",f[i]);
if((i+1)%4==0)
printf("\n");
}
}
*/
//求前20项斐波那契数列,输入m,并求与m最接近的值。
/*
#include<cstdio>
#include<stdlib.h>
#include<math.h>
int main(){
int i;
int f[20]={1,1};
printf("%10d%10d",f[0],f[1]);
for(i=2;i<20;i++){
f[i] = f[i-2]+f[i-1];
printf("%10d",f[i]);
if((i+1)%4==0)
printf("\n");
}
int min,t,j,m;
printf("请输入m:\n");
scanf("%d",&m);
min = abs(m-f[0]);
for(i=1;i<20;i++){
t = abs(m-f[i]);
if(t<min){
min = t;
j = i;
}
}
printf("M=%d,f[i]=%d",m,f[j]);
return 0;
}
*/
运行结果: