首先是轉(zhuǎn)載地址: http://blog.csdn.net/star_yt/article/details/53103172
原博主不在線,如您看到這篇文章,可聯(lián)系我刪除,謝謝.
最近在看php面試題,看到一個(gè)斐波拉契數(shù)列的題: 有一列數(shù)的規(guī)則如下 1、1、2、3、5、8、13、21、34... 求第30位數(shù)是多少.寫(xiě)出相關(guān)函數(shù)和算法名稱 ,
大部分網(wǎng)友都選擇了遞歸,其實(shí)我自己看到題的時(shí)候也是首先想起遞歸,但是,遞歸的拙劣性大家也是有目共睹,所以我也在找有沒(méi)有高手寫(xiě)了其他的方式,找到了上面鏈接里面的文章,所以忍不住想要copy過(guò)來(lái),網(wǎng)上搜索也是太多地方說(shuō)遞歸,所以我也想多一篇文章來(lái)描述非遞歸.
非遞歸寫(xiě)法:
function fbnq($n){ //傳入數(shù)列中數(shù)字的個(gè)數(shù) if($n <= 0){ return 0; } $array[1] = $array[2] = 1; //設(shè)第一個(gè)值和第二個(gè)值為1 for($i=3;$i<=$n;$i++){ //從第三個(gè)值開(kāi)始 $array[$i] = $array[$i-1] + $array[$i-2]; //后面的值都是當(dāng)前值的前一個(gè)值加上前兩個(gè)值的和 } return $array;}
遞歸寫(xiě)法:function fbnq($n){ if($n <= 0) return 0; if($n == 1 || $n == 2) return 1; return fbnq($n - 1) + fbnq($n - 2);}
新聞熱點(diǎn)
疑難解答
網(wǎng)友關(guān)注