NO.1
迭代法
标签:通俗、易懂
思路:先打印第一项、再在循环里面执行fib=fib1+fib2,把fib2赋给fib1,把fib赋给fib2,每行5个可使用if函数(循环次数对5取余)。
#include <stdio.h>
main()
{
long fib1=0,fib2=1,fib=1;
int i;
printf("%ld\t",fib);
for(i=2;i<=20;i++)
{
fib=fib1+fib2;
printf("%ld\t",fib);
fib1=fib2;
fib2=fib;
if(i%5==0)
printf("\n");
}
getch();
}
NO.2
加减法
标签:代码少,不易理解
思路:
i | n | fib |
1 | 1 | 1 |
2 | 3 | 1 |
3 | 5 | 3 |
4 | 8 | 8 |
每次得出下一个数,再通过赋值赋给fib
#include<stdio.h>
main()
{
int fib=0,n=1,i;
for(i=1;i<=20;i++)
{
n+=fib;
fib=n-fib;
printf("%d\t",fib);
if(i%5==0)
printf("\n");
}
getch();
}
NO.3
数组法
标签:代码少,最易理解
思路:先打印前两项,后一项等于前两项之和。
#include<stdio.h>
main()
{
long fib[21];
int i;
fib[1]=1;
fib[2]=1;
printf("%5ld\t%5ld\t",fib[1],fib[2]);
for(i=3;i<=20;i++)
{fib[i]=fib[i-1]+fib[i-2];
printf("%5ld\t",fib[i]);
if(i%5==0)
printf("\n");
}
getch();
}
拓展,动态数组法
NO.1动态数组设置方法
#include <stdio.h>
#include <stdlib.h>
main()
{
int num,*p=0,i;
printf("输入数组元素个数:");
scanf("%d",&num);
p=(int*)malloc(sizeof(int)*num);
for(i=0;i<num;i++)
{
scanf("%d",&p[i]);
}
for(i=0;i<num;i++)
{
printf("%d\n",p[i]);
}
}
NO.2
动态数组法的Fibonacci数列
#include <stdio.h>
#include <stdlib.h>
main()
{
int num,*fib=0,i;
printf("输入要显示元素个数:");
scanf("%d",&num);
fib=(int*)malloc(sizeof(int)*num);
fib[1]=1;
fib[2]=1;
printf("%8ld\t%8ld\t",fib[1],fib[2]);
for(i=3;i<=num;i++)
{fib[i]=fib[i-1]+fib[i-2];
printf("%8ld\t",fib[i]);
if(i%5==0)
printf("\n");
}
getch();
}
相关截图