在海龟绘图中绘制树的递归函数
我正在尝试用递归函数画一棵树。这是我目前的尝试。我知道自己离目标还有很远,但在修正过程中遇到了困难。希望能得到一些帮助!
def svTree( trunkLength, levels ):
""" uses the turtle drawing functions to return a tree with a specified number of levels
input: two integers, trunkLength and levels
"""
newtrunkLength = trunkLength *.5
if levels ==1:
penup()
else:
forward(trunkLength)
left(45)
svTree(trunkLength * 0.5,levels -1)
right(90)
forward(trunkLength *.5)
svTree(trunkLength * 0.5,levels -1)
left(45)
backward(trunkLength)
forward(trunkLength)
right(45)
svTree(trunkLength * 0.5,levels -1)
left(90)
svTree(trunkLength * 0.5,levels -1)
right(45)
backward(trunkLength)
return svTree(newtrunkLength,levels -1)
这是我新的尝试:我觉得这次更接近了,因为我能画出“Y”形状,但我觉得我的递归步骤有问题……请帮帮我!谢谢!:)
def svTree( trunkLength, levels ):
""" uses the turtle drawing functions to return a tree with a specified number of levels
input: two integers, trunkLength and levels
"""
newtrunkLength = trunkLength *.5
if levels ==1:
penup()
else:
forward(trunkLength)
left(45)
forward(trunkLength * 0.5)
penup()
backward(trunkLength * 0.5)
right(90)
pendown()
forward(trunkLength *.5)
penup()
backward(trunkLength *.5)
right(180)
left(45)
right(180)
return svTree(newtrunkLength,levels-1)
1 个回答
1
复制粘贴通常说明你在某些地方做错了,应该把重复的部分提取出来。
你很可能不想在后退的时候画东西,所以在调用 backward()
之前,先调用 penup()
。
另外,你希望所有的子树都从同一个点生长,所以在每次递归调用后,你需要返回到之前的位置。
最后,你从来没有使用返回的值,那么在 return
这一行的递归调用到底想要达到什么呢?