讀書(shū)筆記:《算法圖解》第三章 遞歸

定義:

在數(shù)學(xué)與計(jì)算機(jī)科學(xué)中汇四,是指在函數(shù)的定義中使用函數(shù)自身的方法断箫。遞歸一詞還較常用于描述以自相似方法重復(fù)事物的過(guò)程默终。例如汇歹,當(dāng)兩面鏡子相互之間近似平行時(shí)屁擅,鏡中嵌套的圖像是以無(wú)限遞歸的形式出現(xiàn)的。也可以理解為自我復(fù)制的過(guò)程产弹。

例子:

  • 從前有座山派歌,山里有座廟,廟里有個(gè)老和尚痰哨,正在給小和尚講故事呢胶果!故事是什么呢?“從前有座山斤斧,山里有座廟早抠,廟里有個(gè)老和尚,正在給小和尚講故事呢撬讽!故事是什么呢蕊连?‘從前有座山,山里有座廟游昼,廟里有個(gè)老和尚甘苍,正在給小和尚講故事呢!故事是什么呢烘豌?……’”
  • 一只狗來(lái)到廚房载庭,偷走一小塊面包。廚子舉起杓子,把那只狗打死了囚聚。于是所有的狗都跑來(lái)了靖榕,給那只狗掘了一個(gè)墳?zāi)梗€在墓碑上刻了墓志銘靡挥,讓未來(lái)的狗可以看到:“一只狗來(lái)到廚房序矩,偷走一小塊面包鸯绿。廚子舉起杓子跋破,把那只狗打死了。于是所有的狗都跑來(lái)了瓶蝴,給那只狗掘了一個(gè)墳?zāi)苟痉担€在墓碑上刻了墓志銘,讓未來(lái)的狗可以看到:‘一只狗來(lái)到廚房舷手,偷走一小塊面包拧簸。廚子舉起杓子,把那只狗打死了男窟。于是所有的狗都跑來(lái)了盆赤,給那只狗掘了一個(gè)墳?zāi)梗€在墓碑上刻了墓志銘歉眷,讓未來(lái)的狗可以看到……’”

程序語(yǔ)言中的遞歸:

程序調(diào)用自身的編程技巧稱(chēng)為遞歸( recursion)牺六。遞歸做為一種算法在程序設(shè)計(jì)語(yǔ)言中廣泛應(yīng)用。 一個(gè)過(guò)程或函數(shù)在其定義或說(shuō)明中有直接或間接調(diào)用自身的一種方法汗捡,它通常把一個(gè)大型復(fù)雜的問(wèn)題層層轉(zhuǎn)化為一個(gè)與原問(wèn)題相似的規(guī)模較小的問(wèn)題來(lái)求解淑际,遞歸策略只需少量的程序就可描述出解題過(guò)程所需要的多次重復(fù)計(jì)算,大大地減少了程序的代碼量扇住。遞歸的能力在于用有限的語(yǔ)句來(lái)定義對(duì)象的無(wú)限集合春缕。

遞歸的條件:

一般來(lái)說(shuō),遞歸需要有邊界條件艘蹋、遞歸前進(jìn)段和遞歸返回段锄贼。當(dāng)邊界條件不滿(mǎn)足時(shí),遞歸前進(jìn)女阀;當(dāng)邊界條件滿(mǎn)足時(shí)咱娶,遞歸返回。

  • 基線條件 base case 函數(shù)不再調(diào)用自己
  • 遞歸條件 函數(shù)調(diào)用自己

構(gòu)成遞歸需具備的條件:

  1. 子問(wèn)題須與原始問(wèn)題為同樣的事强品,且更為簡(jiǎn)單膘侮;
  2. 不能無(wú)限制地調(diào)用本身,須有個(gè)出口的榛,化簡(jiǎn)為非遞歸狀況處理琼了。

遞歸的缺點(diǎn):

遞歸算法解題相對(duì)常用的算法如普通循環(huán)等,運(yùn)行效率較低。因此雕薪,應(yīng)該盡量避免使用遞歸昧诱,除非沒(méi)有更好的算法或者某種特定情況,遞歸更為適合的時(shí)候所袁。在遞歸調(diào)用的過(guò)程當(dāng)中系統(tǒng)為每一層的返回點(diǎn)盏档、局部量等開(kāi)辟了棧來(lái)存儲(chǔ)。遞歸次數(shù)過(guò)多容易造成棧溢出等燥爷。
棧:

實(shí)例:求階乘

def factorial(n):
    if n == 1:
        return n
    else:
        return n*factorial(n-1)

上例中溶推,n==1是基線條件(base case)崎溃,n $\neq$ 1是遞歸條件(recursive case)。


棧(stack)又名堆棧,它是一種運(yùn)算受限的線性表新思。其限制是僅允許在表的一端進(jìn)行插入和刪除運(yùn)算香到。這一端被稱(chēng)為棧頂脾歇,相對(duì)地蚣录,把另一端稱(chēng)為棧底。向一個(gè)棧插入新元素又稱(chēng)作進(jìn)棧立宜、入椕疤眩或壓棧,它是把新元素放到棧頂元素的上面橙数,使之成為新的棧頂元素尊流;從一個(gè)棧刪除元素又稱(chēng)作出棧或退棧商模,它是把棧頂元素刪除掉奠旺,使其相鄰的元素成為新的棧頂元素。

棧是限定僅在表頭進(jìn)行插入和刪除操作的線性表施流。

堆疊數(shù)據(jù)結(jié)構(gòu)使用兩種基本操作:推入(push)和彈出(pop):

  • 推入:將數(shù)據(jù)放入堆疊的頂端(陣列形式或串列形式)响疚,堆疊頂端top指標(biāo)加一。
  • 彈出:將頂端數(shù)據(jù)資料輸出(回傳)瞪醋,堆疊頂端資料減一忿晕。

棧的基本特點(diǎn):

  • 先入后出,后入先出银受。
  • 除頭尾節(jié)點(diǎn)之外践盼,每個(gè)元素有一個(gè)前驅(qū),一個(gè)后繼宾巍。

原文地址:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末咕幻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子顶霞,更是在濱河造成了極大的恐慌肄程,老刑警劉巖锣吼,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蓝厌,居然都是意外死亡玄叠,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)拓提,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)读恃,“玉大人,你說(shuō)我怎么就攤上這事代态∷卤梗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵胆数,是天一觀的道長(zhǎng)肌蜻。 經(jīng)常有香客問(wèn)我互墓,道長(zhǎng)必尼,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任篡撵,我火速辦了婚禮判莉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘育谬。我一直安慰自己券盅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布膛檀。 她就那樣靜靜地躺著锰镀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咖刃。 梳的紋絲不亂的頭發(fā)上泳炉,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音嚎杨,去河邊找鬼花鹅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛枫浙,可吹牛的內(nèi)容都是我干的刨肃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼箩帚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼真友!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起紧帕,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤盔然,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體轻纪,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡油额,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了刻帚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潦嘶。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖崇众,靈堂內(nèi)的尸體忽然破棺而出掂僵,到底是詐尸還是另有隱情,我是刑警寧澤顷歌,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布锰蓬,位于F島的核電站,受9級(jí)特大地震影響眯漩,放射性物質(zhì)發(fā)生泄漏芹扭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一赦抖、第九天 我趴在偏房一處隱蔽的房頂上張望舱卡。 院中可真熱鬧,春花似錦队萤、人聲如沸轮锥。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)舍杜。三九已至,卻和暖如春赵辕,著一層夾襖步出監(jiān)牢的瞬間既绩,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工匆帚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留熬词,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓吸重,卻偏偏與公主長(zhǎng)得像互拾,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嚎幸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355