【数据结构与算法】五 兔子数列 斐波那契数列

【数据结构与算法】五 兔子数列 斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

兔子繁殖问题

斐波那契数列又因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”。 一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子? 我们不妨拿新出生的一对小兔子分析一下: 第一个月小兔子没有繁殖能力,所以还是一对 两个月后,生下一对小兔对数共有两对 三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对 依次类推可以列出下表:

经过月数 0 1 2 3 4 5 6 7 8 9 10 11 12
幼仔对数 1 0 1 1 2 3 5 8 13 21 34 55 89
成兔对数 0 1 1 2 3 5 8 13 21 34 55 89 144
总体对数 1 1 2 3 5 8 13 21 34 55 89 144 233

幼仔对数=前月成兔对数 成兔对数=前月成兔对数+前月幼仔对数 总体对数=本月成兔对数+本月幼仔对数 可以看出幼仔对数、成兔对数、总体对数都构成了一个数列。这个数列有关十分明显的特点,那是:前面相邻两项之和,构成了后一项。 这个数列是意大利中世纪数学家斐波那契在<算盘全书>中提出的,这个级数的通项公式,除了具有a(n+2)=an+a(n+1)的性质外,还可以证明通项公式为:an=(1/√5)*{[(1+√5)/2]^n-[(1-√5)/2]^n}(n=1,2,3…..)

F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)

C++

#include <iostream>

using namespace std; 

int  rabbit(int i){
    if(i<2){
        return 1 ;
    }else{
        return rabbit(i-1) + rabbit(i-2);
    }
}

int main(){
    cout << rabbit(12) << endl;
}

黄金分割

有趣的是,这样一个完全是自然数的数列,通项公式却是用无理数来表达的。而且当n趋向于无穷大时,前一项与后一项的比值越来越逼近黄金分割0.618(或者说后一项与前一项的比值小数部分越来越逼近0.618)。 1÷1=1,1÷2=0.5,2÷3=0.666…,3÷5=0.6,5÷8=0.625…………,55÷89=0.617977……………144÷233=0.618025…46368÷75025=0.6180339886…… 越到后面,这些比值越接近黄金比. 证明

a[n+2]=a[n+1]+a[n]。 两边同时除以a[n+1]得到: a[n+2]/a[n+1]=1+a[n]/a[n+1]。 若a[n+1]/a[n]的极限存在,设其极限为x, 则limn->;;∞=limn->;;∞=x。 所以x=1+1/x。 即x²=x+1。 所以极限是黄金分割比..

最后

通过上面一些简单的讲解,
相信朋友们已经知道其原理及特性了。
本人能力有限,
如发现错误或不合理欢迎指正…

你可能感兴趣的:(数据结构,算法,斐波那契数列,兔子数列)