我正在学习递归,并想用Python(turtle)实现这一点:
我做了一个递归函数,在其中我从左下角开始朝着“东”绘制一个正方形。我可以使一侧正确的正方形,而另一侧没有正确的正方形。
在绘制较小的正方形之前向后移动会产生奇怪的结果:
from turtle import *
delay(0)
speed(10)
def square(length, level):
if level == 0:
return
else:
# Start from the bottom-left corner
forward(length)
# Right square
square(length // 2, level - 1)
lt(90)
forward(length)
lt(90)
forward(length)
lt(90)
forward(length)
lt(90)
### Try moving backward before drawing
##backward(length / 2)
# Left square
square(length // 2, level - 1)
square(110, 4)
学习这些分形有什么技巧或好例子吗?
最佳答案
使用turtle
绘制分形时,请注意以下几点:
该函数必须在哪里开始(在您的情况下,请指定“左下角”)。
它停在哪里(?)-位置和方向!这一点在您的代码中不清楚,这就是为什么它不起作用的原因。
您的代码中有两个问题:
您应该移动backward(length // 2)
以正确开始绘制左正方形(就像在注释中所做的一样)
您应该回到开始正方形的位置(大正方形的左下角)
这是带有一些注释的代码:
def square(length, level):
# Start from the bottom-left corner
if level == 0:
return
else:
# Draw the bottom side
forward(length)
# Draw the right square
square(length // 2, level - 1)
# Assume we ended at the same position
# Draw the right side
lt(90); forward(length)
# Draw the upper side
lt(90); forward(length)
# Draw the left side
lt(90); forward(length)
# Go backward
lt(90); backward(length // 2) ;
# Draw the left square
square(length // 2, level - 1)
# Go back to the original position
forward(length // 2)
基本上,您缺少最后一个将龟移动到其原始位置的
forward(length // 2)
。关于python - 使用递归生成分形平方,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34568985/