Python递归绘制嵌套圆形问题:无法生成完整分形图形求助
解决递归分形圆形绘制不完整的问题
问题核心
当前代码仅能生成一层额外小圆形,无法实现多层分形结构,问题出在递归的半径缩放逻辑和冗余的重复绘制代码上。
修改后的完整代码
import turtle def centered_circle(circle_radius, turtle): turtle.penup() turtle.forward(circle_radius) turtle.left(90) turtle.pendown() turtle.circle(circle_radius) turtle.penup() turtle.right(90) turtle.backward(circle_radius) turtle.penup() def recursive_circles(circle_radius, turtle): if circle_radius > 2: # 绘制当前层级的中心圆 centered_circle(circle_radius, turtle) # 处理上方分形分支 turtle.left(90) turtle.forward(circle_radius * 1.5) # 按比例递归,用当前半径的1/2作为新半径 recursive_circles(circle_radius * 0.5, turtle) turtle.backward(circle_radius * 1.5) # 处理下方分形分支 turtle.right(180) turtle.forward(circle_radius * 1.5) recursive_circles(circle_radius * 0.5, turtle) turtle.backward(circle_radius * 1.5) # 处理右侧分形分支 turtle.left(90) turtle.forward(circle_radius * 1.5) recursive_circles(circle_radius * 0.5, turtle) turtle.backward(circle_radius * 1.5) def main(): recursive_turtle = turtle.Turtle() recursive_turtle.speed(0) myWin = turtle.Screen() recursive_turtle.penup() recursive_turtle.goto(0, 100) recursive_turtle.setheading(90) recursive_circles(50, recursive_turtle) myWin.exitonclick() if __name__ == "__main__": main()
关键修改说明
- 递归半径改为比例缩放:将原代码中
circle_radius - 25的固定数值减法,替换为circle_radius * 0.5的比例缩小逻辑,确保每一层的小圆形都能按比例生成下一层更小的圆形,直到半径小于等于2时触发终止条件。 - 移除冗余绘制代码:删掉每个分支中提前绘制
centered_circle(circle_radius * 0.5, turtle)的代码,因为recursive_circles函数本身会先绘制当前半径的中心圆,重复绘制会导致层级混乱,移除后递归会自然延续分形结构。 - 保留要求的终止条件:全程保留
if circle_radius > 2的判断语句,且未使用任何for/while循环。
修改后运行代码,即可生成多层嵌套的分形圆形,与期望效果一致。
内容的提问来源于stack exchange,提问作者user20609250
相关产品推荐
相关产品推荐

