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

基于Python Turtle模块的递归嵌套圆形绘制实现问询

用Python Turtle递归绘制嵌套圆形图案

先给你理清楚递归实现的核心逻辑,再上代码,一步步拆解:

递归的核心思路

递归就是函数自己调用自己,但必须有明确的终止条件,不然会无限循环。这个图案的递归逻辑很直观:

  • 每一层画一个圆
  • 在这个圆的圆周上,均匀放6个更小的圆的圆心
  • 对每个小圆,重复上面的操作,直到圆小到看不见(终止条件)

具体实现步骤

  1. 确定递归函数参数:需要知道当前要画的圆的圆心坐标(x, y)、半径r,这三个参数足够定位和绘制当前圆。
  2. 终止条件:当半径r小于某个阈值(比如5),直接返回,停止递归——再小的圆没必要画了。
  3. 绘制当前圆:移动到圆心下方(turtle画圆是从当前位置的左侧开始,所以要调整到圆心正下方再画),然后画圆。
  4. 计算6个小圆的位置:
    • 每个小圆的圆心在当前圆的圆周上,相邻两个圆心的角度差是60°(360°/6)
    • 小圆的半径设为当前半径的1/3,这样不会和其他小圆或大圆重叠,视觉效果刚好
    • 用三角函数计算每个小圆的圆心坐标:x_new = x + r * cos(角度),y_new = y + r * sin(角度)
  5. 递归调用:对每个计算出的小圆位置,调用同一个函数,传入新的坐标和缩小后的半径。

完整代码示例

import turtle
import math

def draw_nested_circles(x, y, radius):
    # 终止条件:半径太小就停止
    if radius < 5:
        return
    
    turtle.penup()
    # 移动到当前圆的底部(turtle画圆的起始点)
    turtle.goto(x, y - radius)
    turtle.pendown()
    
    # 绘制当前圆
    turtle.circle(radius)
    
    # 计算6个小圆的位置,角度从0到360度,间隔60度
    for angle in range(0, 360, 60):
        # 将角度转为弧度
        radian = math.radians(angle)
        # 小圆的圆心在当前圆的圆周上
        new_x = x + radius * math.cos(radian)
        new_y = y + radius * math.sin(radian)
        # 递归绘制小圆,半径为当前的1/3
        draw_nested_circles(new_x, new_y, radius / 3)

# 初始化turtle
turtle.speed(0)  # 最快速度
turtle.hideturtle()

# 从屏幕中心开始画,初始半径设为100
draw_nested_circles(0, 0, 100)

# 保持窗口显示
turtle.done()

代码细节解释

  • turtle.speed(0):设置最快绘制速度,避免等待太久
  • turtle.hideturtle():隐藏画笔光标,让图案更整洁
  • 为什么小圆半径是当前的1/3?因为如果设为1/2,小圆会和大圆内切,还会互相重叠,1/3的比例刚好让每个小圆都在大圆内部,且彼此不碰
  • 三角函数计算位置:把角度转成弧度(math库的函数需要弧度),然后用圆周坐标公式计算每个小圆的中心

运行代码后,你就能看到从中心大圆开始,一层层嵌套6个小圆的图案,直到圆小到阈值为止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:44:54