2.3.2Python-遞歸

總目錄:http://www.reibang.com/p/e406a9bc93a9

Python - 子目錄:http://www.reibang.com/p/50b432cb9460

遞歸函數(shù)

在函數(shù)內(nèi)部辽装,可以調(diào)用其他函數(shù)。如果一個(gè)函數(shù)在內(nèi)部調(diào)用自身本身,這個(gè)函數(shù)就是遞歸函數(shù)淋样。

這個(gè)就是一個(gè)例子:

如果不理解遞歸的意義俭尖,以為會(huì)輸出:

3

2

1

0

------

0


但是讓我們仔細(xì)分析一下運(yùn)行的過(guò)程:

仔細(xì)分析遞歸的意義层释,并且結(jié)合遞歸的運(yùn)算方式亏狰,正確的輸出結(jié)果為:

3

2

1

0

------

0

1

2

3

遞歸的第一個(gè)難點(diǎn)便是甩恼,進(jìn)入循環(huán)時(shí)后面的語(yǔ)句在循環(huán)結(jié)束后也要執(zhí)行。

比如這個(gè)例子三次遞歸孤澎,可以理解為三層嵌套届氢,第三層嵌套結(jié)束后會(huì)執(zhí)行第二次嵌套最后的語(yǔ)句,第一層同理覆旭。

遞歸函數(shù)的優(yōu)點(diǎn)是定義簡(jiǎn)單缰泡,邏輯清晰稳捆。理論上,所有的遞歸函數(shù)都可以寫(xiě)成循環(huán)的方式,但循環(huán)的邏輯不如遞歸清晰绅喉。

使用遞歸函數(shù)需要注意防止棧溢出禽额。在計(jì)算機(jī)中孽糖,函數(shù)調(diào)用是通過(guò)棧(stack)這種數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的钙蒙,每當(dāng)進(jìn)入一個(gè)函數(shù)調(diào)用,棧就會(huì)加一層棧幀腕铸,每當(dāng)函數(shù)返回惜犀,棧就會(huì)減一層棧幀。由于棧的大小不是無(wú)限的狠裹,所以虽界,遞歸調(diào)用的次數(shù)過(guò)多,會(huì)導(dǎo)致棧溢出酪耳。


最簡(jiǎn)單的例子就是數(shù)值遞歸運(yùn)算:

def fact(n):

????if n==1:

????????return 1

????return n * fact(n -1)

如果print(fact(5))的話會(huì)輸出120浓恳,但是print(fact(1000))呢,會(huì)報(bào)錯(cuò)碗暗。這不是程序哪里錯(cuò)誤了颈将,這就是遞歸太多導(dǎo)致棧溢出。

解決遞歸導(dǎo)致棧溢出的方法就是進(jìn)行尾遞歸優(yōu)化言疗,但是大多數(shù)編程語(yǔ)言都沒(méi)有進(jìn)行尾遞歸優(yōu)化晴圾,所以通過(guò)尾遞歸調(diào)用一樣會(huì)導(dǎo)致棧溢出:

def fact(n):

????return fact_iter(n,1)


def fact_iter(num, product):

????if num ==1:

????????return product

????return fact_iter(num -1, num * product)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市噪奄,隨后出現(xiàn)的幾起案子死姚,更是在濱河造成了極大的恐慌,老刑警劉巖勤篮,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件都毒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡碰缔,警方通過(guò)查閱死者的電腦和手機(jī)账劲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人瀑焦,你說(shuō)我怎么就攤上這事腌且。” “怎么了榛瓮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵铺董,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我禀晓,道長(zhǎng)精续,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任匆绣,我火速辦了婚禮驻右,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘崎淳。我一直安慰自己,他們只是感情好愕把,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布拣凹。 她就那樣靜靜地躺著,像睡著了一般恨豁。 火紅的嫁衣襯著肌膚如雪嚣镜。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天橘蜜,我揣著相機(jī)與錄音菊匿,去河邊找鬼。 笑死计福,一個(gè)胖子當(dāng)著我的面吹牛跌捆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播象颖,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼佩厚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了说订?” 一聲冷哼從身側(cè)響起抄瓦,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陶冷,沒(méi)想到半個(gè)月后钙姊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡埂伦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年煞额,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡立镶,死狀恐怖壁袄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情媚媒,我是刑警寧澤嗜逻,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站缭召,受9級(jí)特大地震影響栈顷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嵌巷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一萄凤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧搪哪,春花似錦靡努、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至漓概,卻和暖如春漾月,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背胃珍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工梁肿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人觅彰。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓吩蔑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親缔莲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哥纫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Python_函數(shù) 在我們有面向?qū)ο笏枷牒螅瑫?huì)更加容易的理解痴奏。所以函數(shù)的章節(jié)內(nèi)容會(huì)較為精簡(jiǎn)蛀骇。 調(diào)用函數(shù) Pytho...
    宋木木的征途是星辰大海閱讀 235評(píng)論 0 0
  • 遞歸函數(shù) 在函數(shù)內(nèi)部,可以調(diào)用其他函數(shù)读拆。如果一個(gè)函數(shù)在內(nèi)部調(diào)用自身本身擅憔,這個(gè)函數(shù)就是遞歸函數(shù)。 舉個(gè)例子檐晕,我們來(lái)計(jì)...
    xupython閱讀 273評(píng)論 0 0
  • 在函數(shù)內(nèi)部暑诸,可以調(diào)用其他函數(shù)蚌讼。如果一個(gè)函數(shù)在內(nèi)部調(diào)用自身本身,這個(gè)函數(shù)就是遞歸函數(shù)个榕。 舉個(gè)例子篡石,我們來(lái)計(jì)算階乘n!...
    luckybabying閱讀 279評(píng)論 0 0
  • 函數(shù)名其實(shí)就是指向一個(gè)函數(shù)對(duì)象的引用,完全可以把函數(shù)名賦給一個(gè)變量西采,相當(dāng)于給這個(gè)函數(shù)起了一個(gè)“別名”:a = ab...
    bjchenli閱讀 619評(píng)論 0 0
  • 2019.2.9彩繪曼陀羅崔鐵艷第41幅 最近在看《佛陀傳》凰萨,佛陀為求得解脫之法,離家修行械馆,遭遇許多后胖眷,在...
    燕子心語(yǔ)閱讀 188評(píng)論 1 1