Skip to content

Instantly share code, notes, and snippets.

@lancetw
Forked from letoh/原文備份
Last active August 29, 2015 14:20
Show Gist options
  • Save lancetw/059908b263e1ae20740e to your computer and use it in GitHub Desktop.
Save lancetw/059908b263e1ae20740e to your computer and use it in GitHub Desktop.
原文
ループが書けなくなる(或いは再帰依存症)レベル10
http://d.hatena.ne.jp/yuki_neko_nyan/20090217/1234850409
level 0
不會寫遞迴,也沒辦法用遞迴思考。只覺得用迴圈寫就好了。
level 1
開始學習遞迴,但只要一用遞迴思考就覺得煩。有時還會忘了寫終止條件。覺得實在太麻煩了還是想寫迴圈就好。
level 2
開始學習尾遞迴。對於怎麼寫才能做尾遞迴最佳化,或者堆疊狀態的變化等等,完全沒有概念。
level 3
學習將遞迴改寫成尾遞迴。慢慢可以理解兩者之間的差異。
level 4
瞭解高階函數其實就是用遞迴定義出來的,對於這類事變得可以用平常心看待。
level 5
隨手就能寫出遞迴。遇到有迴圈特性的東西,就算用尾遞迴來寫也不覺得痛苦了。
level 6
很直覺地用「迴圈」來稱呼以尾遞迴描述的東西。對這類函式命名時,也自然而然就在名字裡加上 loop 之類的字。看到這類函式時,已經不會再特別意識到是用遞迴寫的。
level 7
for 或 while 的語法變得陌生,在查了文件後總算寫出來了。但為什麼要有這麼麻煩的語法呢?明明用遞迴來寫就好了嘛。只要有遞迴、串列生成與高階函數的話就能解決所有問題了。實在無法容忍想用串列生成時卻只能寫 for 的語言。
level 8
對於充滿一堆具迴圈特性的 API 的語言感到不蘇胡。硬是設計出一些 do、dotimes、或 upto 之類的函式並不會比較好,而且這種語法也記不太起來。想在其他語言中修正自己所寫出的「迴圈」時,一直寫不出迴圈之類的語法覺得很挫折。對於 for 的參數順序也搞不清楚了。
level 9
一看到編譯器會先留意能不能對尾遞迴做最佳化,盡量避免使用不能最佳化的語言。這種編譯器的存在本身就是一種罪惡了,最好可以讓它消失。偶爾看到 for 之類的語法時會覺得很懷念,並感嘆「這種東西也曾經存在過啊」。
level 10
什麼是迴圈?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment