分形樹,顧名思義,每一支樹都是一樣的,類似於完全二叉樹,子樹和母樹完全一樣。所以可以用遞迴來實現。思路:所以畫一棵樹時,畫完主幹話分支,因為是一樣的,所以畫分支的過程和畫主幹的過程完全一樣,其實就是乙個縮小版的主幹。這樣一層層遞迴,直到達到終止條件。
先簡單的思考一棵樹,只有兩層,即只有兩個分支。過程是:先畫主幹,畫完主幹,則再畫右分支,畫完右分支,退回到分叉點,然後再畫左分支。
t.forward(branch_len)
# 此時海龜的方向為垂直向上,所以右分支只需向右轉20度即可
t.right(20)
t.forward(branch_len - 15)
t.backward(branch_len - 15)
# 此時海龜的方向是右偏20度,而左分支是左偏20度,所以需要左轉40度
t.left(40)
t.forward(branch_len - 15)
接下來,再思考一下有三層的樹。此時,畫完主幹,畫右分支,那麼畫完右分支後馬上畫左分支嗎?可以想象,以最短路徑的目的簡單思考,並且有規律的畫,肯定不是這樣的,這樣會重複走很多個主幹。用遞迴的思想,畫完分支後,繼續看還能不能繼續畫分支,能畫則繼續遞迴,不能畫則退出當前遞迴,繼續執行。
def tree(branch_len):
# 遞迴結束條件,當前主幹(分支)長度要大於5
if branch_len > 5:
t.forward(branch_len)
t.right(20)
# 繼續遞迴判斷右分支是否還能畫分支
tree(branch_len - 15)
t.left(40)
# 左分支是否還能畫分支
tree(branch_len - 15)
# 本層分支結束,回歸原位,退回到上一層的分支點
t.right(20)
t.backward(branch_len)
測試**如下:
t = turtle.turtle()
t.left(90)
t.penup()
t.backward(100)
t.pendown()
t.pencolor('green')
t.pensize(2)
tree(75)
t.hideturtle()
turtle.done()
遞迴應用之括號匹配檢驗
括號匹配檢驗還可以用棧來解決,參見我的另一篇文章 棧的應用之括號匹配檢驗 這裡給出乙個c 程式,結合注釋來看是如何實現的。include using namespace std bool judge char str 括號檢驗主體函式 bool match char char,int 遞迴呼叫的匹配...
遞迴應用之求和 進製轉換Python
1.求和 給出乙個列表,用遞迴的方式求和。其實求和也是兩個數相加,然後再相加,直到求和完畢。所以可以用遞迴的方式,每次呼叫求和函式,直到列表中的數字還有乙個,返回即可。def resum lists if len lists 1 return lists 0 else return lists 0 ...
zabbix企業應用之分布式監控proxy
先簡單的介紹一下zabbix分布式的2種實現方式proxy與node的優缺點 proxy zabbix proxy 是乙個或多個從監控裝置收集監測資料和傳送到zabbixserver 的程序,屬於代表zabbix server 的執行,所有收集到的資料被暫時存放在 伺服器,之後統一由 伺服器 給za...