算法之递归算法(斐波那契数列之美)(100级阶梯,1,2步,几种方法)

原题如下,有一个100个台阶的阶梯,一次可以选择上一个台阶,或者两个台阶,最后上到楼梯顶有几种走法?


斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1960年代起出版了《斐波纳契数列》季刊,专门刊载这方面的研究成果。


问题规模从小化开始分解,当1个阶梯的时候,1种方法;当2个阶梯的时候,2种方法;当3个阶梯的时候,3种方法;当4个阶梯的时候,5种方法;当5个阶梯的时候,8种方法。。。。。。

SO,这是一个斐波那契数列问题。

小弟,写了个递归算法的程序来计算下100位的那个数是多少?


#include <stdio.h>
#include <unistd.h>
#include <time.h>

long int Fibonacci( int number)
{
    if (number ==0 || number ==1) {
        return number;
    }else{
        return Fibonacci(number-2) + Fibonacci(number-1);
    }
}


int main(int argc, const char * argv[])
{

    long int number = 1;
    int i;
    
    for (i = 1; i <= 101; i++) {
        
        clock_t t1 = clock();
        printf("肥波那切第%d个是 %ld\n",i,Fibonacci(i));
        clock_t t2 = clock();
        printf("肥波那切第%d个数字,耗时%f秒\n",i,(double)(t2-t1)/CLOCKS_PER_SEC);
    }
    
    return 0;
}


看下我的计算机配置

《算法之递归算法(斐波那契数列之美)(100级阶梯,1,2步,几种方法)》

然后,为了看下递归算法的效率问题,使用clock()函数(#include<time.h>)看下计算数列的时间。

肥波那切第1个是 1
肥波那切第1个数字,耗时0.000007秒
肥波那切第2个是 1
肥波那切第2个数字,耗时0.000004秒
肥波那切第3个是 2
肥波那切第3个数字,耗时0.000002秒
肥波那切第4个是 3
肥波那切第4个数字,耗时0.000003秒
肥波那切第5个是 5
肥波那切第5个数字,耗时0.000003秒
肥波那切第6个是 8
肥波那切第6个数字,耗时0.000002秒
肥波那切第7个是 13
肥波那切第7个数字,耗时0.000004秒
肥波那切第8个是 21
肥波那切第8个数字,耗时0.000004秒
肥波那切第9个是 34
肥波那切第9个数字,耗时0.000003秒
肥波那切第10个是 55
肥波那切第10个数字,耗时0.000004秒
肥波那切第11个是 89
肥波那切第11个数字,耗时0.000006秒
肥波那切第12个是 144
肥波那切第12个数字,耗时0.000008秒
肥波那切第13个是 233
肥波那切第13个数字,耗时0.000010秒
肥波那切第14个是 377
肥波那切第14个数字,耗时0.000014秒
肥波那切第15个是 610
肥波那切第15个数字,耗时0.000038秒
肥波那切第16个是 987
肥波那切第16个数字,耗时0.000033秒
肥波那切第17个是 1597
肥波那切第17个数字,耗时0.000048秒
肥波那切第18个是 2584
肥波那切第18个数字,耗时0.000078秒
肥波那切第19个是 4181
肥波那切第19个数字,耗时0.000125秒
肥波那切第20个是 6765
肥波那切第20个数字,耗时0.000197秒
肥波那切第21个是 10946
肥波那切第21个数字,耗时0.000317秒
肥波那切第22个是 17711
肥波那切第22个数字,耗时0.000502秒
肥波那切第23个是 28657
肥波那切第23个数字,耗时0.000778秒
肥波那切第24个是 46368
肥波那切第24个数字,耗时0.001260秒
肥波那切第25个是 75025
肥波那切第25个数字,耗时0.002034秒
肥波那切第26个是 121393
肥波那切第26个数字,耗时0.003289秒
肥波那切第27个是 196418
肥波那切第27个数字,耗时0.005324秒
肥波那切第28个是 317811
肥波那切第28个数字,耗时0.008609秒
肥波那切第29个是 514229
肥波那切第29个数字,耗时0.013923秒
肥波那切第30个是 832040
肥波那切第30个数字,耗时0.023116秒
肥波那切第31个是 1346269
肥波那切第31个数字,耗时0.038816秒
肥波那切第32个是 2178309
肥波那切第32个数字,耗时0.062723秒
肥波那切第33个是 3524578
肥波那切第33个数字,耗时0.100141秒
肥波那切第34个是 5702887
肥波那切第34个数字,耗时0.162453秒
肥波那切第35个是 9227465
肥波那切第35个数字,耗时0.262944秒
肥波那切第36个是 14930352
肥波那切第36个数字,耗时0.412486秒
肥波那切第37个是 24157817
肥波那切第37个数字,耗时0.669751秒
肥波那切第38个是 39088169
肥波那切第38个数字,耗时1.095143秒
肥波那切第39个是 63245986
肥波那切第39个数字,耗时1.771608秒
肥波那切第40个是 102334155
肥波那切第40个数字,耗时2.821634秒
肥波那切第41个是 165580141
肥波那切第41个数字,耗时4.565981秒
肥波那切第42个是 267914296
肥波那切第42个数字,耗时7.299127秒
肥波那切第43个是 433494437
肥波那切第43个数字,耗时11.804256秒
肥波那切第44个是 701408733
肥波那切第44个数字,耗时19.249104秒
肥波那切第45个是 1134903170
肥波那切第45个数字,耗时30.882790秒
肥波那切第46个是 1836311903
肥波那切第46个数字,耗时50.059402秒
肥波那切第47个是 2971215073
肥波那切第47个数字,耗时81.122859秒
肥波那切第48个是 4807526976
肥波那切第48个数字,耗时131.617654秒
肥波那切第49个是 7778742049
肥波那切第49个数字,耗时213.326472秒
肥波那切第50个是 12586269025
肥波那切第50个数字,耗时344.160353秒
肥波那切第51个是 20365011074
肥波那切第51个数字,耗时555.599157秒
肥波那切第52个是 32951280099
肥波那切第52个数字,耗时900.098143秒
肥波那切第53个是 53316291173
肥波那切第53个数字,耗时1455.740086秒
肥波那切第54个是 86267571272
肥波那切第54个数字,耗时2367.473675秒
肥波那切第55个是 139583862445
肥波那切第55个数字,耗时3791.005930秒
肥波那切第56个是 225851433717
肥波那切第56个数字,耗时6118.214521秒
肥波那切第57个是 365435296162
肥波那切第57个数字,耗时9897.173980秒
肥波那切第58个是 591286729879
肥波那切第58个数字,耗时16016.764547秒

斐波那契数列是一个充满哲理、充满人生韵味和上帝之手的神奇数列。这个数列似乎是冥冥之中的命运之手,掌握着宇宙中的终极奥秘之一。


仔细观察计算斐波那契数列的时间,竟然也是斐波那契数列。

由于效率方面的原因,计算到58个数字暂停。遵循这个计算规律,可以得出就算出100级台阶的101个数字的时间是第60位斐波那契数字的10倍时间(以s为单位)。

第60位数字是154800855920,以我这台电脑的cpu来计算的话,大概需要的时间是1548008559200s,

25800142653.3min,

430002377.555h,

17916765.7315d,

597225.524382m,

49768.7936985y。


没错,使用这台电脑计算101位的斐波那契数列,使用递归算法的话,大约需要49768年的时间。

OH,my God!

到这里,你会明白一点这个问题的意思。


水平有限,欢迎指正,谢谢。

未完。


时间有限,持续更新。





    原文作者:递归算法
    原文地址: https://blog.csdn.net/wisdom605768292/article/details/10157899
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞