可視化遞歸——你所不知道的Python之美
上面的圖是用10行Python代碼畫出的。盯著它看是否有一種眩暈的感覺?其實這只是遞歸的一種簡單實現。
請認真閱讀上述代碼會發現這個函數調用了自身。這就是所謂的遞歸。
遞歸(Recursion)
將問題不斷拆解,直至問題規模縮小至你可以解決為止。
Recursion is a method of solving problems that involves breaking a problem down into smaller and smaller subproblems until you get to a small enough problem that it can be solve trivially.
看完這個定義的菠蘿一臉懵逼,這個回歸到底是個啥?
不用著急,我們先記住下面3個原則:
(1)遞歸演算法必須有一個基礎問題
A recurisive algorithm must havea base case.
(這個基礎問題指最終一下子能解決的問題,也是拆解的終止條件)
(2)遞歸演算法必須拆解問題
A recurisive algorithm must change its state and move toward the base case.
(拆解即縮小問題規模)
(3)遞歸演算法必須調用自身
A recurisive algorithm must call itself, recursively.
(調用自身,形式上會在函數體中出現函數名)
所以聰明的你看出來上面那個代碼中哪條語句是最小問題了嗎?
下面我們來看另一串代碼,分形樹。
膜拜一下基本代碼:
看看它的運行結果,emmmm,感覺更像是一顆草而不是樹
先不管那麼多,我們先來看一眼代碼中的base case是誰
它就是
樹枝長度
我們來對照一下上面的原則:
(1)基礎問題(base case):
line4brachLen
(2)拆解:
line7
下面這個小視頻應該可以明顯看出它的作畫過程
那麼如何讓它看起來像一棵樹呢
TAG:Python |