上次,我们给大家讲到了兔子数列,累计平方和的特点,即平方和也是由兔子数列构成的,我们从之前的等式中貌似很难得到结论。为啥有这样神奇的结论呢? 我们转换一下思路,平方有何几何意义,显然平方指的是一个正方形的面积,那好,我们依照这个思路,作一个几何图形试试。 这下明白了吧,比如第一个等式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++中求解我们的兔子数列,下次。我们将会介绍兔子数列在大自然界中的应用! |
|