簡體   English   中英

使用兩個自調用了解遞歸 function 的執行流程

[英]Understanding the flow of execution of a recursive function with two self calls

我需要幫助了解這個 function 是如何工作的:

import turtle

annie = turtle.Turtle()

def draw(t, length, n):

    if n == 0:
        return
    angle = 50
    t.fd(length*n)
    t.lt(angle)
    draw(t, length, n-1)
    t.rt(2*angle)
    draw(t, length, n-1)
    t.lt(angle)
    t.bk(length*n)

draw(annie, 30, 4)

turtle.mainloop()

這個 function 創建了一個帶有大 Y 形分支的對稱分支圖形,兩個較小的 Y 形分支懸掛在較大 Y 形分支的每個 arm 的末端。 function 以“烏龜”(當它在屏幕上移動時留下一條線的小箭頭)結束,從它繪制的最后一個較小分支的尖端向后退四次,並在它從較大分支的開頭開始的地方結束分支。 那么,如果在該語句之前的自我調用從 n 的值中減去 1,那么在 function 完成時 n = 4 是如何實現的呢? 第一次自調用是否會遍歷 function 的前幾行,直到 n = 0,然后通過 ZC1C425268E68385D1AB5074C17A9F 的 rest? 在這種情況下,第二個自調用語句的第一個實例的 n 值是多少? 4? 0? 我想我顯然誤解了一些東西,並希望有任何資源來幫助我了解我在做什么。

當最外面的 function 完成時n仍然是 4 的原因是每個 function 都有自己的n副本。 每個 function 在其自己的 scope 中工作。

最外面的 function 將n的值傳遞給下一個 function。 所以每個后續的 function 創建它自己的副本並從副本中減去 1,從不觸及最外層函數 scope 中的n

但是,這對於列表、對象等來說是不同的。

暫無
暫無

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

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