求斐波那契数


众所周知斐波那契数在数学和计算机中有着广泛的应用

斐波那契数的原理是第一个数是 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个数

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. void main()  
  5. {  
  6.     long f1,f2;  
  7.     int i;  
  8.     f1=1,f2=1;  
  9.     for(i=1;i<=20;i++)  
  10.     {  
  11.         printf("%12ld%12ld",f1,f2);  
  12.         if(0==i%2)  
  13.         {  
  14.             printf("\n");  
  15.         }  
  16.         f1=f1+f2;  
  17.         f2=f1+f2;  
  18.     }  
  19.   
  20.    system("pause");  
  21. }  

编译运行

运行结果:

for语句通过引进中间变量的方法打印出斐波那契数:

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. void main()  
  5. {  
  6.     long f1, f2,f3;  
  7.     int i;  
  8.     f1 = 1, f2 = 1;  
  9.     f3 = 0;  
  10.     printf("%12d %12d\n", f1, f2);  
  11.   
  12.     for (i = 1; i <= 40-2; i++)  
  13.     {  
  14.         f3 = f1 + f2;  
  15.   
  16.         printf("%12ld", f3);  
  17.         if (0 == i % 2)  
  18.         {  
  19.             printf("\n");  
  20.         }  
  21.         f1 = f2;  
  22.         f2 = f3;  
  23.     }  
  24.   
  25.     system("pause");  
  26. }  
#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个数

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. void main()  
  5. {  
  6.     long f1, f2,f3;  
  7.     int i = 3;  
  8.     f1 = 1, f2 = 1;  
  9.     f3 = 0;  
  10.     printf("%12d %12d\n", f1, f2);  
  11.   
  12.     while (i<=40)  
  13.     {  
  14.         f3 = f1 + f2;  
  15.   
  16.         printf("%12ld", f3);  
  17.         if (0 == i % 2)  
  18.         {  
  19.             printf("\n");  
  20.         }  
  21.         f1 = f2;  
  22.         f2 = f3;  
  23.   
  24.         i++;  
  25.     }  
  26.   
  27.     system("pause");  
  28. }  
#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个数

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. void main()  
  5. {  
  6.     long f1, f2,f3;  
  7.     int i = 3;  
  8.     f1 = 1, f2 = 1;  
  9.     f3 = 0;  
  10.     printf("%12d%12d\n", f1, f2);  
  11.   
  12.     do  
  13.     {  
  14.         f3 = f1 + f2;  
  15.   
  16.         printf("%12ld", f3);  
  17.         if (0 == i % 2)  
  18.         {  
  19.             printf("\n");  
  20.         }  
  21.         f1 = f2;  
  22.         f2 = f3;  
  23.   
  24.         i++;  
  25.     }while (i <= 40);  
  26.   
  27.     system("pause");  
  28. }  
#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个数:

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. void main()  
  5. {  
  6.     long f1, f2,f3;  
  7.     int i = 3;  
  8.     f1 = 1, f2 = 1;  
  9.     f3 = 0;  
  10.     printf("%12d%12d\n", f1, f2);  
  11.   
  12.   
  13. loop:  
  14.         f3 = f1 + f2;  
  15.   
  16.         printf("%12ld", f3);  
  17.         if (0 == i % 2)  
  18.         {  
  19.             printf("\n");  
  20.         }  
  21.         f1 = f2;  
  22.         f2 = f3;  
  23.   
  24.         if (i >= 40)  
  25.         {  
  26.             system("pause");  
  27.             return;  
  28.         }  
  29.   
  30.         i++;  
  31.   
  32.         goto loop;  
  33.   
  34.     system("pause");  
  35. }  
#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个数:

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. int  f(int n)  
  5. {  
  6.     if (1 == n)  
  7.     {  
  8.         return 1;  
  9.     }  
  10.     else if (2 == n)  
  11.     {  
  12.         return 1;  
  13.     }  
  14.     else  
  15.     {  
  16.         return f(n - 1) + f(n - 2);  
  17.     }  
  18. }  
  19.   
  20. void main()  
  21. {  
  22.     printf("%d\n", f(40));  
  23.   
  24.     system("pause");  
  25. }  
#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");
}

运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值