#include
void fib(int n,int f0,int f1)
{
int f;//当前项
int i=0;
if(n<=0)return ;
if(n==1){ printf("%8d\n",f0); return; // 0}
if(n>=2)
printf("%8d,%8d",f0,f1);// f0 ,f1
for(i=2;i
f=f0+f1; // f(i) =f(i-2)+ f(i-1);斐波那契数列的递推公式;
f0=f1; // f0 =f(i-1), 下一轮循环 i++,所以 下一轮循环的i-2 本轮的i-1;
f1=f; // f1=f(i) ,下一轮循环 i++ ,所以 下一轮循环的i-1 本轮的i;
printf(",%8d",f);
}
printf("\n");
}
int main()
{ //必须知道前两项 1)0,1;2)1,1;3)1,2;
//这里为0,1;
fib(20,0,1);
return 0;
}
PS:利用数组实现的也不错,但是斐波那契数列增长很快,
我这个,和用数组的都会溢出。
如果项数很多的话,可能需要用64位整数计算,或者高精度的大整数计算。
#include
#define NUM 20
int main()
{
int i;
long fib[NUM] = {1,1};
for(i=2;i
fib[i] = fib[i-1]+fib[i-2];
}
for(i=0;i
printf("第%d个斐波那契数:%d\n", i, fib[i]);
}
getch();
return 0;
}