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

求助:Python递归Turtle绘制深度3的分形树(正方形层级)问题

修复你的递归海龟分形树代码

嘿,我一眼就看到问题所在啦,你的海龟没动主要是几个关键的代码顺序和缺失问题,咱们一步步搞定:

核心问题分析

  • turtle.exitonclick()放错位置了:这行代码会让程序卡在等待用户点击退出的状态,你把它放在创建海龟和调用绘制函数之前,导致后面的代码完全没机会执行,海龟当然一动不动!
  • 缺少变量定义:你调用squares(turt, length, depth)时,length和depth这两个变量根本没赋值,就算前面的代码执行了也会报错。
  • 递归函数未实现:你的squares函数只写了个开头,没有具体的绘制和递归逻辑,自然没法画出分形。

修复后的完整代码

下面是针对depth=3的正方形分形树的完整实现,我还加了注释方便你理解:

import turtle

def squares(t, length, depth):
    # 递归终止条件:深度为0时停止绘制
    if depth == 0:
        return
    
    # 绘制当前层级的正方形
    for _ in range(4):
        t.forward(length)
        t.right(90)
    
    # 移动到当前正方形的右侧中间位置,准备绘制下一层的小正方形
    t.penup()
    t.forward(length)
    t.right(90)
    t.forward(length / 2)
    t.left(90)
    t.pendown()
    
    # 递归绘制右侧的小正方形:深度减1,边长缩小为原来的一半
    squares(t, length * 0.5, depth - 1)
    
    # 回到当前正方形的左侧中间位置,绘制另一侧的小正方形
    t.penup()
    t.left(90)
    t.forward(length)
    t.right(90)
    t.backward(length)
    t.pendown()
    
    # 递归绘制左侧的小正方形
    squares(t, length * 0.5, depth - 1)
    
    # 回到当前正方形的起始位置,方便后续递归回溯
    t.penup()
    t.forward(length)
    t.right(90)
    t.forward(length / 2)
    t.left(90)
    t.pendown()

def main():
    turtle.speed(0)  # 最快绘制速度
    turtle.screensize(1000, 1000)  # 设置画布大小
    
    # 创建海龟对象
    turt = turtle.Turtle()
    # 定义初始边长和递归深度
    initial_length = 200
    depth = 3
    
    # 调用递归绘制函数
    squares(turt, initial_length, depth)
    
    # 最后等待用户点击再退出,这次位置对了!
    turtle.exitonclick()

if __name__ == "__main__":
    main()

关键调整说明

  1. 调整了exitonclick()的位置:现在它在所有绘制逻辑之后,确保海龟先完成分形绘制,再等待用户退出。
  2. 补充了变量定义:添加了initial_length(初始正方形边长)和depth=3,符合你的需求。
  3. 实现了递归逻辑:
    • 每次递归先绘制当前层级的正方形,再移动到合适位置绘制下一层级的小正方形。
    • 递归终止条件保证深度到0时停止,避免无限递归。
    • 缩放比例(length * 0.5)你可以根据自己的分形图调整,比如改成0.6会让小正方形更大一些。

如果你的分形树是每个正方形的四个角都有小正方形,只需要修改递归前的移动逻辑,调整到四个角的位置即可~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:22:09