簡體   English   中英

有人可以向我解釋此遞歸程序如何工作嗎?

[英]Can someone explain to me how does this recursion program work?

在此處輸入圖片說明

我知道光標首先向左旋轉90度,然后向后旋轉100,然后遞歸開始。

但是,根據樹函數中代碼的順序,光標將向前進75,向右轉20度,然后再次發生遞歸並向前75-15。 這將發生5次,最后一個僅向前10。然后光標將向后10,然后向左旋轉40度,依此類推。

這就是我感到困惑的地方。

    def tree(branchLen,t)
    if (branchLen>5): 
    t.forward(branchLen)
    t.right(20)
    tree(branchLen-15,t)
    t.left(40)
    tree(branchLen-15,t)
    t.right(20)
    t.backward(branchLen)

def main():
    t = turtle.Turtle()
    myWin = turtle.Screen()
    t.left(90)
    t.up()
    t.backward(100)
    t.down()
    t.color("green")
    tree(75,t)
    myWin.exitonclick()

該程序似乎跳到最后一行代碼,然后跳到中間一行,然后向前移動10位,依此類推,我只是想不出如何遵循代碼來執行他們的操作。 我對遞歸一無所知,但是這一遞歸確實讓我頭疼。

使用Turtle成功進行遞歸繪圖的關鍵是將小烏龜放在找到它的位置。 這樣,您可以一個接一個地調用多個函數,它們將無縫地組合在一起。

在您的特定代碼中:

t.forward(branchLen)

它繪制分支。

t.right(20)

它將向右旋轉以准備第一個子分支。

tree(branchLen-15,t)

繪制一個較小的子分支。 請記住,從該分支機構返回時,海龜將位於同一地點。

t.left(40)

它回滾前一匝(20),並向左旋轉(+20),為第二個子分支做准備。

tree(branchLen-15,t)

繪制第二個子分支。

t.right(20)
t.backward(branchLen)

而這兩行是關鍵。 第一個取消旋轉,使烏龜向前看。 第二行移回起點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM