遞迴應用之分形樹構建Python

2021-10-23 17:50:57 字數 1306 閱讀 6366

分形樹,顧名思義,每一支樹都是一樣的,類似於完全二叉樹,子樹和母樹完全一樣。所以可以用遞迴來實現。

思路:所以畫一棵樹時,畫完主幹話分支,因為是一樣的,所以畫分支的過程和畫主幹的過程完全一樣,其實就是乙個縮小版的主幹。這樣一層層遞迴,直到達到終止條件。

先簡單的思考一棵樹,只有兩層,即只有兩個分支。過程是:先畫主幹,畫完主幹,則再畫右分支,畫完右分支,退回到分叉點,然後再畫左分支。

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...