菲波纳契数列又称"菲波纳契神奇数列",是由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;
}