需要帮助理解递归示例

时间:2014-10-02 10:25:44

标签: python recursion

这是一个来自interactivepython.org的例子。我正在努力理解为什么函数以它的方式运行。我知道它为branchLen向前移动,然后右转20度。然后它自己调用并再次向前移动(这次是分支Len-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()

1 个答案:

答案 0 :(得分: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中编程它可能包含一些语法错误.. 感谢salman代码语法现在好了

并做一个跟踪

main:num = 3

 |-> toZero(3)

     |-> toZero(2)

           |-> toZero(1)

                   |-> toZero(0)

                         |-> exit

       *note:   num++ <--|

               <--|

        <--|

  <--|

*注意:当递归到达结尾时,函数堆栈从它们自己调用的点继续(因为它有结果并且可以继续)。 所以执行下一条指令(num ++)。

最终结果是...... 3