摘要:?jiǎn)栴}斐波那契數(shù)列的計(jì)算有如下一個(gè)數(shù)列,,其規(guī)則是前兩個(gè)已知即和,從第個(gè)開(kāi)始,其值為其左邊兩個(gè)值的和此數(shù)列稱為斐波那契數(shù)列。
問(wèn)題
斐波那契數(shù)列的計(jì)算:有如下一個(gè)數(shù)列:1,1, 2, 3, 5, 8, 13, 21,....... 其規(guī)則是:前兩個(gè)已知(即1和2),從第3個(gè)開(kāi)始,其值為其左邊兩個(gè)值的和(此數(shù)列稱為斐波那契數(shù)列)。定義一個(gè)函數(shù),該函數(shù)可以求出該數(shù)列的任意第n個(gè)數(shù)的值。遞歸思想來(lái)解決:
遞歸的本質(zhì):函數(shù)在其內(nèi)部調(diào)用自身
解決問(wèn)題時(shí)可以將其分拆成若干個(gè)小步驟,大問(wèn)題的解決方法與小步驟方法一致,定義求問(wèn)題的函數(shù),在需要的位置調(diào)用函數(shù)即可。
function fibonacci($n){ //找出口:什么時(shí)候結(jié)束遞歸的調(diào)用 if($n==! || $n==2) return 1; //計(jì)算其他項(xiàng) //找入口:什么時(shí)候開(kāi)始遞歸調(diào)用 return fibonacci($n-1)+fibonacci($n-2); /**思考 *return是否可以使用echo替換 *不可以,因?yàn)閞eturn 結(jié)束函數(shù)的調(diào)用 *需要返會(huì)給下次遞歸調(diào)用使用 **/ } $start=microtime(true);//開(kāi)始計(jì)時(shí) echo fibonacci(35); $end=microtime(true);//函數(shù)調(diào)用結(jié)束在計(jì)時(shí) echo "計(jì)算耗時(shí)".($end-$start)."秒";//4.9秒 //遞歸每次調(diào)用時(shí),沒(méi)有立即結(jié)束函數(shù)的調(diào)用,內(nèi)存沒(méi)有釋放,等到后面計(jì)算出結(jié)果,才從后面開(kāi)始釋放內(nèi)存
思考問(wèn)題:
1.遞歸:
找入口:
找出口:
2.return是否可以使用echo替換
不可以 return結(jié)束函數(shù)的調(diào)用
需要返回給下次遞歸調(diào)用使用
迭代思想來(lái)解決function fibonacci($n){ if($n==1 ||$n==2) return 1; //其他項(xiàng) //第三項(xiàng)--> //假設(shè)求第七項(xiàng),從第三項(xiàng)考試逐個(gè)計(jì)算 //本次計(jì)算作為下次計(jì)算的條件使用 //定義初始條件 //前兩項(xiàng)作為基本條件 $first=1; $secont=2; for($i=3;$i<=$n;$i++){ //之間兩項(xiàng)之和 $res=$first+$second; //為后續(xù)計(jì)算做準(zhǔn)備 //下次計(jì)算的第一項(xiàng)來(lái)自本次計(jì)算計(jì)算的第二項(xiàng) $first=$second; //下次計(jì)算的第二項(xiàng)來(lái)自本次計(jì)算的結(jié)果 $second=$res; } //循環(huán)結(jié)束 得到結(jié)果 return $res; } $start=microtime(true); echo fibonacci(135); $end=microtime(true); echo "計(jì)算耗時(shí):".($end-$start);//4.315秒,比遞歸效率高幾千萬(wàn)倍
結(jié)論:迭代的運(yùn)行效率比遞歸高很多,能用迭代解決就別用遞歸,也就是說(shuō)先考慮迭代再考慮遞歸。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/93465.html
摘要:?jiǎn)栴}斐波那契數(shù)列的計(jì)算有如下一個(gè)數(shù)列,,其規(guī)則是前兩個(gè)已知即和,從第個(gè)開(kāi)始,其值為其左邊兩個(gè)值的和此數(shù)列稱為斐波那契數(shù)列。 問(wèn)題 斐波那契數(shù)列的計(jì)算:有如下一個(gè)數(shù)列:1,1, 2, 3, 5, 8, 13, 21,....... 其規(guī)則是:前兩個(gè)已知(即1和2),從第3個(gè)開(kāi)始,其值為其左邊兩個(gè)值的和(此數(shù)列稱為斐波那契數(shù)列)。定義一個(gè)函數(shù),該函數(shù)可以求出該數(shù)列的任意第n個(gè)數(shù)的值。 遞歸...
摘要:所以,遞歸在編程中同樣是很重要的一個(gè)知識(shí)點(diǎn)。舉個(gè)例子用遞歸實(shí)現(xiàn)求第個(gè)斐波那契數(shù)。總結(jié)起來(lái)四個(gè)字大事化小繼續(xù)舉斐波那契數(shù)的例子三遞歸是怎樣運(yùn)行的我們通過(guò)一道題目來(lái)講解。 ...
摘要:語(yǔ)言在設(shè)計(jì)中考慮了函數(shù)的高效性和易用性兩個(gè)原則。在語(yǔ)言中,最常見(jiàn)的當(dāng)屬函數(shù)了。以上就是一個(gè)函數(shù),它被稱為語(yǔ)言的入口函數(shù),或者主函數(shù)。例如和都是函數(shù)名。形式參數(shù)當(dāng)函數(shù)調(diào)用完成之后就自動(dòng)銷毀了。 ...
摘要:中的算法附道面試常見(jiàn)算法題解決方法和思路關(guān)注每日一道面試題詳解面試過(guò)程通常從最初的電話面試開(kāi)始,然后是現(xiàn)場(chǎng)面試,檢查編程技能和文化契合度。值得記住的數(shù)組方法有和。一個(gè)好的解決方案是使用內(nèi)置的方法。 JavaScript中的算法(附10道面試常見(jiàn)算法題解決方法和思路) 關(guān)注github每日一道面試題詳解 Introduction 面試過(guò)程通常從最初的電話面試開(kāi)始,然后是現(xiàn)場(chǎng)面試,檢查編程...
摘要:那假如我們用遞歸來(lái)描述這種情況呢定義基本情況其它情形所以在上述求和中的定義又用到了自己本身的定義,這就構(gòu)成了遞歸。 說(shuō)起遞歸,我覺(jué)得其實(shí)大部分人應(yīng)該是不陌生的,遞歸廣泛存在于生活中。比如: showImg(https://segmentfault.com/img/remote/1460000007420204?w=294&h=450); The woman in this image ...
閱讀 2289·2021-11-24 09:38
閱讀 1986·2021-11-22 14:44
閱讀 1150·2021-07-29 13:48
閱讀 2615·2019-08-29 13:20
閱讀 1115·2019-08-29 11:08
閱讀 2046·2019-08-26 10:58
閱讀 1264·2019-08-26 10:55
閱讀 3149·2019-08-26 10:39