使用递归方法和类数组两种方法计算斐波那契数列

 菲波纳契数列又称"菲波纳契神奇数列",是由13世纪的意大利数学家菲波纳契提出的,当时是和兔子的繁殖问题有关的,它是一个很重要的数学模型。这个问题是:有小兔一对,若第二个月它们成年,第三个月生下小兔一对,以后每月生产一对小兔,而所生小兔亦在第二个月成年,第三个月生产另一对小兔,以后亦每月生产小兔一对,假定每产一对小兔必为一雌一雄,且均无死亡,试问一年后共有小兔几对?

案例分析
以1对新出生小兔子为例。

第1个月:小兔子1没有繁殖能力,所以还是1对。

第2个月:小兔子1进入成熟期,还是1对。

第3个月:小兔子1生了1对小兔子2,本月共有2对兔子。

第4个月:小兔子1又生了1对小兔子3,本月共有3对兔子。

第5个月:小兔子1又生了1对小兔子4,而在第3个月出生的小兔子2也生了1对小兔子5,本月共有5对兔子。

第6个月:小兔子1,2,3各生1对小兔子,本月共有8对兔子。

所以兔子序列为 1 1 2 3 5 8....

即后一项是前面两项之和,下面使用递归方法和类数组方法计算斐波那契数列,

#include <iostream>
using namespace std;
int f(int x){
	if(x==1||x==2)
		return 1;
	return f(x-1)+f(x-2);
}
int main(){
//使用递归方法输出结果 
cout<<f(46)<<endl;
//输出前一项与后一项的比值,这个比值非常接近黄金分割数0.618
cout<<f(45)/f(46)<<endl;

//使用类数组方法输出结果,这个方法代码量比递归法大,但是运行速度更快 
int a=1,b=1,c;
for(int i=3;i<=46;i++){
	c=a+b;
	a=b;
	b=c;	
}
cout<<c;
	
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值