SICP 第一章讀書筆記 - 遞歸與迭代

花了三周左右時間讀完了 "Structure and Interpretation of Computer Programs" 第一章,完成了大部分的習題春贸,在這里記錄下書中的一些精華段落浊服,以及個人的一些感悟裁奇。

Iteration vs Recursion

首先季蚂,截取一段書中對于“迭代和遞歸”的描述:

The contrast between the two processes can be seen in another way. In the iterative case, the program variables provide a complete description of the state of the process at any point. If we stopped the computation between steps, all we would need to do to resume the computation is to supply the interpreter with the values of the three program variables. Not so with the recursive process. In this case there is some additional “hidden” information, maintained by the interpreter and not contained in the program variables, which indicates “where the process is” in negotiating the chain of deferred operations. The longer the chain, the more information must be maintained.

這段描述再配合上計算 factorial 的過程(process)插龄,把迭代和遞歸的區(qū)別清晰地展示了出來昙楚。

iterative

recursive

遞歸從“形狀”上看近速,先增大再縮小堪旧;而迭代卻是線性的削葱。這里所謂的“形狀”就是計算所需要的空間。
另外淳梦,遞歸還需要把一部分“隱藏狀態(tài)”交給 interpreter 來維護析砸;而迭代卻是把所有的狀態(tài)放在參數(shù)里。這樣導致的結(jié)果就是爆袍,如果計算過程中斷首繁,迭代可以從中斷的地方開始繼續(xù)執(zhí)行作郭,而遞歸則不行,因為那部分隱藏的狀態(tài)已經(jīng)丟失了蛮瞄。

再截取書中的一段注解#30:

When we discuss the implementation of procedures on register machines in chapter 5, we will see that any iterative process can be realized “in hardware” as a machine that has a fixed set of registers and no auxiliary memory. In contrast, realizing a recursive process requires a machine that uses an auxiliary data structure known as a stack.

當然所坯,遞歸也有優(yōu)點,遞歸能讓我們更好的理解問題挂捅,而且在處理一些有層次關(guān)系的數(shù)據(jù)時芹助,用遞歸更自然。

One should not conclude from this that tree-recursive processes are useless. When we consider processes that operate on hierarchically structured data rather than numbers, we will find that tree recursion is a natural and powerful tool.32 But even in numerical operations, tree-recursive processes can be useful in helping us to understand and design programs.

此外闲先,書中把 Process 和 Procedure 的對比描述地也很精彩状土。簡單來說,Process 屬于概念上的東西伺糠,跟具體語言無關(guān)蒙谓,而 Procedure 是用具體的編程語言把 Process 實現(xiàn)出來。

迭代過程(iterative process)也可以用遞歸程序(recursive procedure)來實現(xiàn)训桶,因為 Scheme 之類的語言實現(xiàn)支持“尾遞歸”(tail-recursive)累驮,因此常見的 for,while 之類的循環(huán)原語只是作為語法糖(syntatic sugar)而存在。而其他沒有支持尾遞歸的語言(C, Python)則需要借助 for,while 來實現(xiàn)迭代過程舵揭。

讀完第一章后谤专,不得不佩服本書的兩位作者,平淡的幾句話就能把很多深刻的問題解釋地非常透徹午绳,可能這也就是為什么這本書在老派的程序員當中相當受推崇置侍。

接下來幾天(也許幾周?)準備寫下第一章的重點:使用程序(procedure)來構(gòu)建抽象拦焚,從而使得復雜的邏輯更簡單易懂蜡坊,也更靈活易改。

P.S. 如果想對遞歸/尾遞歸有更深入的了解赎败,這篇文章絕對值得一看~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秕衙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子僵刮,更是在濱河造成了極大的恐慌灾梦,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妓笙,死亡現(xiàn)場離奇詭異,居然都是意外死亡能岩,警方通過查閱死者的電腦和手機寞宫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拉鹃,“玉大人辈赋,你說我怎么就攤上這事鲫忍。” “怎么了钥屈?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵悟民,是天一觀的道長。 經(jīng)常有香客問我篷就,道長射亏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任竭业,我火速辦了婚禮智润,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘未辆。我一直安慰自己窟绷,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布咐柜。 她就那樣靜靜地躺著兼蜈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拙友。 梳的紋絲不亂的頭發(fā)上为狸,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音献宫,去河邊找鬼钥平。 笑死,一個胖子當著我的面吹牛姊途,可吹牛的內(nèi)容都是我干的涉瘾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼捷兰,長吁一口氣:“原來是場噩夢啊……” “哼立叛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贡茅,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤秘蛇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后顶考,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赁还,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年驹沿,在試婚紗的時候發(fā)現(xiàn)自己被綠了艘策。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡渊季,死狀恐怖朋蔫,靈堂內(nèi)的尸體忽然破棺而出罚渐,到底是詐尸還是另有隱情,我是刑警寧澤驯妄,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布荷并,位于F島的核電站,受9級特大地震影響青扔,放射性物質(zhì)發(fā)生泄漏源织。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一赎懦、第九天 我趴在偏房一處隱蔽的房頂上張望雀鹃。 院中可真熱鬧,春花似錦励两、人聲如沸黎茎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽傅瞻。三九已至,卻和暖如春盲憎,著一層夾襖步出監(jiān)牢的瞬間嗅骄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工饼疙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留溺森,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓窑眯,卻偏偏與公主長得像屏积,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子磅甩,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

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