2014-10-02 197 views
-1

這是從interactivepython.org取得的示例。我很努力地理解爲什麼函數按照它的方式運行。我知道它向前推進分支,然後向右轉20度。然後它自己調用並再次向前移動(這次是branch-15),然後再右轉。它直到branchLen小於5,然後停止。那麼函數什麼時候執行代碼的其餘部分,例如左轉呢?如果有人能夠按時間順序向我解釋函數的事件,我會非常感激。需要幫助瞭解遞歸示例

import turtle 

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() 

main() 
+3

你試過投入打印語句,看看有什麼被執行時?或者在調試器中逐行執行它? – 2014-10-02 10:29:52

回答

1
def toZero(num): 
    num -= 1 
    if num == 0: 
     return 
    toZero(num) 
    num += 1 
    return num 


def main(): 
    num = toZero(3) 
    print num 


if __name__ == '__main__': 
    main() 

我建議你一個簡單的例子,我的嘗試例如但 當心,我從來沒有在Python程序可能包含一些語法錯誤.. 由於薩爾曼代碼現在語法是確定

並做了跟蹤

主:NUM = 3

|-> toZero(3) 

    |-> toZero(2) 

      |-> toZero(1) 

        |-> toZero(0) 

         |-> exit 

     *note: num++ <--| 

       <--| 

     <--| 

    <--| 

*注意:當遞歸達到結束時,函數堆棧從它們自己調用的地方繼續(因爲有結果並且可以繼續)。 所以執行下一條指令(num ++)。

最終的結果是... 3