求第n个斐波那契数 递归和迭代两种方法

      求第n个斐波那契数,在本篇博客中讲两种方法:一是利用递归调用函数实现,另一种是利用迭代求出第n个斐波那契数。

       首先要了解什么是斐波那契数列,斐波那契数列的特征是前两个数是1,其后数位前两个数之和,如 1   1   2   3   5   8....

下面给出利用递归调用实现,程序代码如下:

#include <stdio.h>
int fib(int n)  //函数实现返回斐波那契数值
{
	if (n <= 2)  
	{
		return 1;     //前两个数为1
	}
	return fib(n - 1) + fib(n - 2);     //第n个数值为它前面两个数之和,形成函数调用
}
int main()
{
	int h = 0;
	printf("please enter the number:");
	scanf("%d", &h);
	printf("%d\n", fib(h));
	system("pause");
	return 0;
}

输入你想要求的数字,运行结果如下图:

     递归调用使程序代码看起来精简一目了然,程序可读性较强,可是如果要求的数字序列号很大,在栈里函数会不停调用,最后返回值,程序调用开销太大,可能计算时间也会很长,效率也会特别低。

为了避免程序代码运行开销过大,程序效率不高,有时不用递归调用来实现一个项目,下面用另一种方法来实现(迭代),利用迭代,要求的数等于它前面两数的和,循环起来;

程序代码如下:

#include <stdio.h>
int fibmine(int n)
{
	int first = 1;
	int second = 1;
	int now = 1;
	while (n-- > 2)   //循环条件n>2
	{
		now = first + second;
		first = second;
		second = now;
	}return now;  //返回值now
}
int main()
{
	int h = 0;
	printf("please enter the number:");
	scanf("%d", &h);
	printf("%d\n", fibmine(h));
	system("pause");
	return 0;
}

程序运行结果如下:

它的好处是节省了代码开销,避免了递归调用函数不停调用最后递归的开销,可以很快地求出某个斐波那契数,效率较快。


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值