众所周知斐波那契数在数学和计算机中有着广泛的应用
斐波那契数的原理是第一个数是 1,第二个数是1,从第三个数开始每一个数都是前两个数之和
数学表示为:
f(n) = 1 n<=2
f(n)=f(n-1)+f(n-2) n>2
列如斐波那契数的前十个分别是: 1, 1, 2,3,5,8,13,21,34,55
从编程的角度看用C语言实现斐波那契数代码如下
for语句 实现输出斐波那契数的前40个数
#include <stdio.h>
#include <stdlib.h>
void main()
{
long f1,f2;
int i;
f1=1,f2=1;
for(i=1;i<=20;i++)
{
printf("%12ld%12ld",f1,f2);
if(0==i%2)
{
printf("\n");
}
f1=f1+f2;
f2=f1+f2;
}
system("pause");
}
编译运行
运行结果:
for语句通过引进中间变量的方法打印出斐波那契数:
- #include <stdio.h>
- #include <stdlib.h>
- void main()
- {
- long f1, f2,f3;
- int i;
- f1 = 1, f2 = 1;
- f3 = 0;
- printf("%12d %12d\n", f1, f2);
- for (i = 1; i <= 40-2; i++)
- {
- f3 = f1 + f2;
- printf("%12ld", f3);
- if (0 == i % 2)
- {
- printf("\n");
- }
- f1 = f2;
- f2 = f3;
- }
- system("pause");
- }
#include <stdio.h>
#include <stdlib.h>
void main()
{
long f1, f2,f3;
int i;
f1 = 1, f2 = 1;
f3 = 0;
printf("%12d %12d\n", f1, f2);
for (i = 1; i <= 40-2; i++)
{
f3 = f1 + f2;
printf("%12ld", f3);
if (0 == i % 2)
{
printf("\n");
}
f1 = f2;
f2 = f3;
}
system("pause");
}
运行结果:
while语句实现斐波那契数打印前40个数
- #include <stdio.h>
- #include <stdlib.h>
- void main()
- {
- long f1, f2,f3;
- int i = 3;
- f1 = 1, f2 = 1;
- f3 = 0;
- printf("%12d %12d\n", f1, f2);
- while (i<=40)
- {
- f3 = f1 + f2;
- printf("%12ld", f3);
- if (0 == i % 2)
- {
- printf("\n");
- }
- f1 = f2;
- f2 = f3;
- i++;
- }
- system("pause");
- }
#include <stdio.h>
#include <stdlib.h>
void main()
{
long f1, f2,f3;
int i = 3;
f1 = 1, f2 = 1;
f3 = 0;
printf("%12d %12d\n", f1, f2);
while (i<=40)
{
f3 = f1 + f2;
printf("%12ld", f3);
if (0 == i % 2)
{
printf("\n");
}
f1 = f2;
f2 = f3;
i++;
}
system("pause");
}
运行结果:
do--while实现打印斐波那契数的前40个数
- #include <stdio.h>
- #include <stdlib.h>
- void main()
- {
- long f1, f2,f3;
- int i = 3;
- f1 = 1, f2 = 1;
- f3 = 0;
- printf("%12d%12d\n", f1, f2);
- do
- {
- f3 = f1 + f2;
- printf("%12ld", f3);
- if (0 == i % 2)
- {
- printf("\n");
- }
- f1 = f2;
- f2 = f3;
- i++;
- }while (i <= 40);
- system("pause");
- }
#include <stdio.h>
#include <stdlib.h>
void main()
{
long f1, f2,f3;
int i = 3;
f1 = 1, f2 = 1;
f3 = 0;
printf("%12d%12d\n", f1, f2);
do
{
f3 = f1 + f2;
printf("%12ld", f3);
if (0 == i % 2)
{
printf("\n");
}
f1 = f2;
f2 = f3;
i++;
}while (i <= 40);
system("pause");
}
运行结果:
goto实现打印斐波那契数的前40个数:
- #include <stdio.h>
- #include <stdlib.h>
- void main()
- {
- long f1, f2,f3;
- int i = 3;
- f1 = 1, f2 = 1;
- f3 = 0;
- printf("%12d%12d\n", f1, f2);
- loop:
- f3 = f1 + f2;
- printf("%12ld", f3);
- if (0 == i % 2)
- {
- printf("\n");
- }
- f1 = f2;
- f2 = f3;
- if (i >= 40)
- {
- system("pause");
- return;
- }
- i++;
- goto loop;
- system("pause");
- }
#include <stdio.h>
#include <stdlib.h>
void main()
{
long f1, f2,f3;
int i = 3;
f1 = 1, f2 = 1;
f3 = 0;
printf("%12d%12d\n", f1, f2);
loop:
f3 = f1 + f2;
printf("%12ld", f3);
if (0 == i % 2)
{
printf("\n");
}
f1 = f2;
f2 = f3;
if (i >= 40)
{
system("pause");
return;
}
i++;
goto loop;
system("pause");
}
运行结果:
递归实现打印斐波那契数的第40个数:
- #include <stdio.h>
- #include <stdlib.h>
- int f(int n)
- {
- if (1 == n)
- {
- return 1;
- }
- else if (2 == n)
- {
- return 1;
- }
- else
- {
- return f(n - 1) + f(n - 2);
- }
- }
- void main()
- {
- printf("%d\n", f(40));
- system("pause");
- }
#include <stdio.h>
#include <stdlib.h>
int f(int n)
{
if (1 == n)
{
return 1;
}
else if (2 == n)
{
return 1;
}
else
{
return f(n - 1) + f(n - 2);
}
}
void main()
{
printf("%d\n", f(40));
system("pause");
}
运行结果: