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

使用Python Turtle递归绘制分形正方形图案问题求解

问题原因

你现有代码的核心问题是绘制完当前层级正方形后,海龟的朝向、位移计算逻辑错误,两次递归调用的起始位置没有对齐到正确的子正方形锚点,才会出现尺寸偏差、位移过大的问题。

修改思路

  • 绘制当前正方形时统一逻辑,绘制完成后回到正方形左下角原点,保持朝向向右,避免后续位移计算混乱
  • 右上角子正方形的起始锚点为当前正方形向上、向右各偏移2*size/3的位置,子正方形尺寸为当前的1/3
  • 左下角子正方形的起始锚点就是当前正方形的左下角原点,无需额外偏移
  • 递归调用前后统一处理抬笔/落笔状态,避免绘制多余的辅助线

修复后完整代码

import turtle as tt

def recurse(depth, size):
    if depth == 0:
        return
    # 设置当前层级正方形颜色
    tt.pencolor('blue' if depth % 2 == 0 else 'orange')
    # 绘制当前正方形,绘制完成后回到左下角原点,朝向保持向右
    tt.pendown()
    for _ in range(4):
        tt.forward(size)
        tt.left(90)
    tt.penup()
    
    # 移动到右上角子正方形的起始位置
    tt.forward(2 * size / 3)
    tt.left(90)
    tt.forward(2 * size / 3)
    tt.right(90)
    # 递归绘制右上角子正方形
    recurse(depth - 1, size / 3)
    
    # 回到当前正方形左下角原点
    tt.right(90)
    tt.forward(2 * size / 3)
    tt.left(90)
    tt.backward(2 * size / 3)
    
    # 递归绘制左下角子正方形
    recurse(depth - 1, size / 3)

# 调整初始绘制位置,避免内容超出画布
tt.penup()
tt.goto(-150, -150)
tt.pendown()
recurse(4, 200)
tt.hideturtle()
tt.done()

运行以上代码即可得到你预期的分形正方形效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:51:03