斐波那契數列的計算:有以下一個數列:1,1, 2, 3, 5, 8, 13, 21,....... 其規則是:前兩個已知(即1和2),從第3個開始,其值爲其左邊兩個值的和(此數列稱爲斐波那契數列)。定義一個函數,該函數能夠求出該數列的任意第n個數的值。
function fibonacci($n){ //找出口:何時結束遞歸的調用 if($n==! || $n==2) return 1; //計算其餘項 //找入口:何時開始遞歸調用 return fibonacci($n-1)+fibonacci($n-2); /**思考 *return是否能夠使用echo替換 *不能夠,由於return 結束函數的調用 *須要返會給下次遞歸調用使用 **/ } $start=microtime(true);//開始計時 echo fibonacci(35); $end=microtime(true);//函數調用結束在計時 echo '計算耗時'.($end-$start).'秒';//4.9秒 //遞歸每次調用時,沒有當即結束函數的調用,內存沒有釋放,等到後面計算出結果,才從後面開始釋放內存
思考問題:
1.遞歸:php
2.return是否能夠使用echo替換函數
function fibonacci($n){ if($n==1 ||$n==2) return 1; //其餘項 //第三項--> //假設求第七項,從第三項考試逐個計算 //本次計算做爲下次計算的條件使用 //定義初始條件 //前兩項做爲基本條件 $first=1; $secont=2; for($i=3;$i<=$n;$i++){ //之間兩項之和 $res=$first+$second; //爲後續計算作準備 //下次計算的第一項來自本次計算計算的第二項 $first=$second; //下次計算的第二項來自本次計算的結果 $second=$res; } //循環結束 獲得結果 return $res; } $start=microtime(true); echo fibonacci(135); $end=microtime(true); echo '計算耗時:'.($end-$start);//4.315秒,比遞歸效率高几千萬倍
結論:迭代的運行效率比遞歸高不少,能用迭代解決就別用遞歸,也就是說先考慮迭代再考慮遞歸。code