圣诞节就要到了,有没有要送给朋友礼物的程序员呢?
import turtle
def tree(d, s):
if d <= 0:
return
turtle.forward(s)
tree(d - 1, s * 0.8)
turtle.right(120)
tree(d - 3, s * 0.5)
turtle.right(120)
tree(d - 3, s * 0.5)
turtle.right(120)
turtle.backward(s)
n = 100 # 🎄调整树大小的区域🎄
turtle.speed('fastest')
turtle.left(90)
turtle.forward(3 * n)
turtle.color("orange", "yellow")
turtle.left(126)
for i in range(5):
turtle.forward(n / 5)
turtle.right(144)
turtle.forward(n / 5)
turtle.left(72)
turtle.end_fill()
turtle.right(126)
turtle.color("dark green")
turtle.backward(n * 4.8)
tree(15, n)
turtle.backward(n / 5)
这里重点来讲解一下,函数 tree()
的工作原理。
tree()
函数使用递归的方式来绘制一棵树。- 传入的参数参数
d
表示树的深度,s
表示树干长度。 - 首先向前绘制树干,然后递归调用自身来绘制更小的分支,每次将树干长度缩小为原来的 0.8 0.8 0.8 倍。
- 接着,通过右转 120 120 120 度来绘制向右的分支,递归调用自身来绘制更小的分支,每次将树干长度缩小为原来的 0.5 0.5 0.5 倍。
- 再次右转 120 120 120 度,重复绘制向左的分支,最后回到原来的位置,向后绘制回到起始位置。
tree()
函数通过递归不断调用自身,最终绘制出整棵树的结构。- 运行效果如下。