您的位置:首页 > 理论基础 > 数据结构算法

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

2014-10-23 09:46 127 查看
一对幼兔一个月后长成小兔(每对兔子默认一公一母),再过一个月长成成兔并且生下一对小兔,以此类推,两年后有多少对兔子?

数列是由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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: