分享

不死神兔的奥秘(二)

 长沙7喜 2017-08-04

上次,我们给大家讲到了兔子数列,累计平方和的特点,即平方和也是由兔子数列构成的,我们从之前的等式中貌似很难得到结论。为啥有这样神奇的结论呢?

我们转换一下思路,平方有何几何意义,显然平方指的是一个正方形的面积,那好,我们依照这个思路,作一个几何图形试试。

这下明白了吧,比如第一个等式1^2+1^2=1*2。左边表示两个正方形的面积,右边表示一个长方形的面积,很显然它们表示的是同一区块的面积。再比最后一个等式,左边表示上图中六个正方形的面积之和,右边表示图中的大长方形的面积。现在似乎明白了等式为什么成立了,但是等式右边的这些数字为什么是斐波那契数呢?

这就是因为,斐波那契数为前两项之和,我们就可以构造上面的几何图形,而且这样构造的图形中的长方形的边长只能为斐波那契数。

另一个性质

式中左边为相邻两个斐波那契数的平方和,我们发现计算的结果全为斐波那契数,也就是说对于这样的等式我们只用它自身的数字就足够了。但是,该式我们并没有写出更多的项,大家可以思考思考,如果继续往下写还能否成立呢?

c++的兔子数列

作为经典的问题,c++同样也有求解兔子数列的方案,那我们来介绍两种最基础的方式,分别是递归求解兔子数列以及递推求解的方案。

递归

斐波那契数列是编程书中讲递归必提的,因为它是按照递归定义的。

#include

using namespace std;


int Fib(int n)

{

    return n < 2="" 1="" :="" (fib(n-1)="" +="">

}


int main()

{

    for(int i=0;i<>

        cout<><><><>

    return 0;

}


这是编程最方便的解法,当然,也是效率最低的解法,原因是会出现大量的重复计算。为了避免这种情况,可以采用递推的方式。

递推

#include

using namespace std;


int main()

{

    int Fib[1000];

    Fib[0]=0;Fib[1]=1;

    for(int i=2;i<>

    {

        Fib[i]=Fib[i-1]+Fib[i-2];

        cout<><><><>

    }

return 0;

}

递推的方法可以在较短的时间内计算出这个值了!

最后,再给大家介绍一个神奇的性质:    

    每3个数有且只有一个被2整除,

    每4个数有且只有一个被3整除,

    每5个数有且只有一个被5整除,

    每6个数有且只有一个被8整除,

    每7个数有且只有一个被13整除,

    每8个数有且只有一个被21整除,

    每9个数有且只有一个被34整除,

    ……

    每n个数有且只有一个被Fib[n]整除!

这次的文章,给大家讲了兔子数列的一些性质的证明,以及如何在c++中求解我们的兔子数列,下次。我们将会介绍兔子数列在大自然界中的应用!


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多