Python 错误区域的递归分形平方

Python 错误区域的递归分形平方,python,recursion,turtle-graphics,fractals,Python,Recursion,Turtle Graphics,Fractals,我正在为分形正方形编写代码。我有画正方形的功能,我得到的是: 但这正是我试图实现的目标:。 我认为我的问题是没有正确放置坐标,但我可能完全错了。这是我的密码: #setting up stuff Code by Angel M. Gonzalez import turtle window = turtle.Screen() square = turtle.Pen() square.speed(0) square.penup() square.goto(0,0) square.pendown()

我正在为分形正方形编写代码。我有画正方形的功能,我得到的是: 但这正是我试图实现的目标:。 我认为我的问题是没有正确放置坐标,但我可能完全错了。这是我的密码:

#setting up stuff Code by Angel M. Gonzalez
import turtle
window = turtle.Screen()
square = turtle.Pen()
square.speed(0)
square.penup()
square.goto(0,0)
square.pendown()
square.color("black", "red")

#defining my function to make what i want

def pattern(length, depth, x, y):
    square.goto(0,0)
    if depth > 1:
        square.begin_fill()
        square.forward(length)
        square.left(90)
        square.forward(length)
        square.left(90)
        square.forward(length)
        square.left(90)
        square.forward(length)
        square.end_fill()

        pattern(length/2.2, depth -1, 1,1)
        pattern(length/4.4, depth -1, 1.5,1.5)

#run my function  
pattern(300, 4, 0,0)




#exit
turtle.exitonclick()

就像我之前说的,我不知道这里的坐标是不是放错了,或者我是否完全遗漏了什么。我想说,我对原始平方的函数很好。

你的递归方法完全错误。在递归中不能使用绝对定位:

square.goto(0,0)
...
pattern(length/4.4, depth -1, 1.5,1.5)
一切都必须与你所处的位置相关。同样,为了制作这样的递归绘图,递归函数应该使海龟保持与进入递归函数时相同的状态(位置和方向),以便调用者知道它的位置

对于这种设计,你不能简单地画一个正方形然后递归,你需要在画的时候在正方形的每个角落递归

作为一个简单的初始练习,让我们只画这个形状的线,忽略填充。这可能不会直接导致解决方案,但会证明上述原则:

from turtle import Turtle, Screen

def pattern(length, depth):

    if depth < 1:
        return

    # assume we're at the center of square, move to corner
    turtle.penup()
    turtle.backward(length / 2)
    turtle.left(90)
    turtle.backward(length / 2)
    turtle.right(90)
    turtle.pendown()

    for _ in range(4):
        pattern(length / 2.2, depth - 1)  # recurse at each corner
        turtle.forward(length)
        turtle.left(90)

    # return to center of square for the benefit of caller
    turtle.penup()
    turtle.forward(length / 2)
    turtle.left(90)
    turtle.forward(length / 2)
    turtle.right(90)
    turtle.pendown()

screen = Screen()
turtle = Turtle()
turtle.speed('fastest')

pattern(100, 4)

turtle.hideturtle()
screen.exitonclick()
从海龟导入海龟,屏幕
def模式(长度、深度):
如果深度小于1:
回来
#假设我们在广场的中心,移动到拐角处
乌龟
海龟。向后(长度/2)
乌龟。左(90)
海龟。向后(长度/2)
乌龟,对(90)
乌龟
对于范围(4)内的uu:
图案(长度/2.2,深度-1)#在每个角重复出现
乌龟。向前(长度)
乌龟。左(90)
#为了主叫人的利益,回到广场中心
乌龟
乌龟。向前(长度/2)
乌龟。左(90)
乌龟。向前(长度/2)
乌龟,对(90)
乌龟
screen=screen()
海龟
乌龟。速度(“最快”)
模式(100,4)
乌龟
screen.exitonclick()
输出

现在的问题是填充这些方块,并确保图案中右上角的方块始终“藏在下面”