有人可以向我解释这个递归程序是如何工作的吗?

时间:2016-11-09 20:29:52

标签: python recursion

enter image description here

据我所知,光标首先向左转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,依此类推,我只是无法弄清楚如何遵循他们所做的动作的代码。我通过一次递归来解决这个问题,但是这个让我很头疼。

1 个答案:

答案 0 :(得分:1)

使用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)

这两条线是关键。第一个撤消旋转,以便乌龟向前看。第二行回到起点。