我正在学习递归,并想用Python(turtle)实现这一点:

python - 使用递归生成分形平方-LMLPHP

我做了一个递归函数,在其中我从左下角开始朝着“东”绘制一个正方形。我可以使一侧正确的正方形,而另一侧没有正确的正方形。

在绘制较小的正方形之前向后移动会产生奇怪的结果:

python - 使用递归生成分形平方-LMLPHP

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/

10-12 23:46