数据结构——斐波拉契序列——小兔问题

一对幼兔一个月后长成小兔(每对兔子默认一公一母),再过一个月长成成兔并且生下一对小兔,以此类推,两年后有多少对兔子?

 

数列是由13世纪意大利斐波那契提出的,1,1,2,3,5,8,13,21…… 
这个数列从第三项开始,每一项都等于前两项之和
递推关系决定: F0=0,F1=1 ,Fn+2=Fn + Fn+1(n>=0) 
通项公式为:[(1+√5)/2]^n /√5 - [(1-√5)/2]^n /√5 【√5表示根号5】
main()
{
    printf("输入月:");
    int a;
    scanf("%d",&a);
    int chengtu = 0;                               //定义成兔
    int xiaotu = 0;                                //定义小兔
    int youtu = 0;                                 //定义幼兔
    int he = 0;                                    //计算兔子的总和
    for (int i = 1; i <= 1 * a;i++ )
    {
        if (i == 1)
        {
            chengtu = 0;
            xiaotu = 0;
            youtu = 1;
        }
        else
        {
            chengtu = chengtu + xiaotu;            //这个月的成兔=上个月的成兔+上个月的小兔
            xiaotu = youtu;                        //这个月的小兔=上个月的幼兔
            youtu = chengtu;                       //这个月的幼兔=上个月的成兔
            he = chengtu + xiaotu + youtu;
        }
    }
    printf("幼兔: %d 、小兔: %d 、成兔: %d 、总和:%d \n",youtu, xiaotu, chengtu, he);
}
该数列有很多奇妙的属性 
1. 随着数列项数的增加,前一项与后一项之比越逼近黄金分割0.6180339887……
2. 这样一个完全是自然数的数列,通项公式居然是用无理数来表达的。
3. 从第二项开始,每个奇数项的平方都比前后两项之积多1,每个偶数项的平方都比前后两项之积少1 。如果任意挑两个数为起始,比如5、-2.4,然后两项两项地相加下去,
形成5、-2.4、2.6、0.2、2.8、3、5.8、8.8、14.6……等,你将发现随着数列的发展,前后两项之比也越来越逼近黄金分割,且某一项的平方与前后两项之积的差值也交替相差某个值
4. 如果你看到有这样一个题目:某人把一个8*8的方格切成四块,拼成一个5*13的长方形,故作惊讶地问你:为什么64=65?其实就是利用了菲波那契数列的这个性质:5、8、13正是数列中相邻的三项,事实上前后两块的面积确实差1,只不过后面那个图中有一条细长的狭缝,一般人不容易注意到 

http://www.cnblogs.com/hqjy/p/4027451.html
posted on 2014-10-23 09:46  1129496211  阅读(460)  评论(0编辑  收藏  举报