据我所知,光标首先向左转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,依此类推,我只是无法弄清楚如何遵循他们所做的动作的代码。我通过一次递归来解决这个问题,但是这个让我很头疼。
答案 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)
这两条线是关键。第一个撤消旋转,以便乌龟向前看。第二行回到起点。