You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python Turtle绘制指定递归分形图形?求代码修正

问题描述

我尝试绘制如下图形:
目标分形图形
但始终无法实现。我意识到该图形是由4个相同的子图形在正确位置重复构成的,以下是我目前的代码,求帮忙完成需求:

import turtle

def draw_fractal(t, length, depth):

    if depth: 
        for _ in range(4):
            t.forward(length)
            t.right(90)

        t.penup()
        t.forward(length / 2)
        t.right(90)
        t.forward(length / 2)
        t.left(90)
        t.pendown()

        # Draws smaller squares
        for _ in range(4):
            draw_fractal(t, length / 2, depth - 1)
            if _ < 3: 
                t.penup()
                t.forward(length)
                t.right(90)
                t.pendown()
        
        t.penup()
        t.left(90)
        t.forward(length / 2)
        t.right(90)
        t.forward(length / 2)
        t.pendown()

def main():
    
    window = turtle.Screen()
    window.bgcolor("white")
    t = turtle.Turtle()
    t.speed(0)

    
    draw_fractal(t, 200, 3)

    
    window.mainloop()

main()

修正方案

你的核心问题是子图形的定位逻辑错误:原代码将子正方形画在大正方形的中心区域,但目标图形的子正方形是在每个大正方形边的外侧中点位置。以下是修正后的代码:

import turtle

def draw_fractal(t, length, depth):
    if depth == 0:
        return
    
    # 绘制当前层级的正方形
    for _ in range(4):
        t.forward(length)
        t.right(90)
    
    # 遍历四条边,在每条边的外侧中点绘制子正方形
    for _ in range(4):
        # 移动到当前边的中点
        t.penup()
        t.forward(length / 2)
        t.pendown()
        
        # 转向外侧,递归绘制子图形
        t.right(90)
        draw_fractal(t, length / 2, depth - 1)
        t.left(90)
        
        # 移动到下一条边的起点
        t.penup()
        t.forward(length / 2)
        t.right(90)
        t.pendown()

def main():
    window = turtle.Screen()
    window.bgcolor("white")
    t = turtle.Turtle()
    t.speed(0)
    
    # 调整初始位置到屏幕中心区域,避免图形偏移出可视范围
    t.penup()
    t.goto(-100, 100)
    t.pendown()
    
    draw_fractal(t, 200, 3)
    
    window.mainloop()

main()

关键修改说明

  1. 子图形定位逻辑:放弃中心定位,改为每条边中点外侧绘制子正方形,完全匹配目标图形的结构
  2. 递归终止条件:明确depth == 0时返回,逻辑更清晰严谨
  3. 初始位置调整:将海龟初始位置移到屏幕左上角区域,确保完整显示整个分形图形

内容的提问来源于stack exchange,提问作者GratefullyDead

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 09:48:14