python 趣味习题_递归函数(谢尔宾斯基三角形 画法)

这里写目录标题

本专栏旨在记录本人解决问题的思考方法,及实现过程。有更好方法或对程序执行有疑问的伙伴,可在评论区留言,共同讨论。

这里写目录标题

一级目录

二级目录

三级目录

题目要求

  • 定义: 谢尔宾斯基三角形最早由波兰数学家谢尔宾斯基在1915年提出。它的构造方法是:以一个正三角形为初始图形,每次将正三角形分割成4个边长为原来一半的小三角形,并去掉其中间的小三角形,重复这一过程,直到不能再分割为止。
  • 要求: 用最简单的代码,绘制出谢尔宾斯基三角形。

最终结果


解决流程

绘制中发现,如果完全按照定义,通过每次截取的方式(每次在三角形中截取一个三角形),则需用到大量的计算,如何确定每一次画笔的位置也是一个难题。

本人在绘制中,通过按边绘制,如果非最后一层,则取半绘制三角形,这样减少了计算量,并且只用 6 段代码就实现了谢尔斯基三角形的绘制。

程序实现

python 复制代码
import turtle

turtle.setup(500,500)  # 窗口大小
turtle.screensize(400, 400)  # 画布大小
#turtle.tracer(False)  # 省略绘制过程
t = turtle.Turtle()
t.penup()
t.goto(0, 200)
t.pendown()
t.color('blue', 'yellow')
t.left(60)
# 定义基本参数
bc = 400  # 边长


# 绘制函数
def huasj(n, jbc):
    if n != 0:
        for _ in range(3):
            huasj(n - 1, jbc / 2)
            t.right(120)
            t.forward(jbc)


#绘制连长为 400 的 5 层三角形
huasj(5, bc)

t.hideturtle()
turtle.update()  # 更新画布
turtle.done()

** 递归绘制函数:**

python 复制代码
def huasj(n, jbc):
    if n != 0:
        for _ in range(3):
            huasj(n - 1, jbc / 2)
            t.right(120)
            t.forward(jbc)

** 递归函数说明:** 1.递归结束条件,层数为0时不执行;2.递归执行过程,如果 n > 1 ,则执行 n - 1。

运行示例

下图为连长为400, 层数为7的 谢尔宾斯基三角形 示例:

小结

该方法,仍然受到递归限制,层数不能增大,同时在 liunx 中运行画三角形时,不能进行色彩填充。

相关推荐
FL16238631295 分钟前
基于C#winform部署软前景分割DAViD算法的onnx模型实现前景分割
开发语言·算法·c#
weixin_580614009 分钟前
模型持久化不会提升准确率:揭秘训练集误用导致的“虚假精度”陷阱
jvm·数据库·python
2401_8877245010 分钟前
Layui弹出层layer.tab如何监听标签页切换的具体序号
jvm·数据库·python
郭wes代码12 分钟前
大三Java课设:一行行敲出来的贪吃蛇,老师以为我是CV的
java·开发语言
2501_9142459325 分钟前
构建 Go CLI 应用的最佳实践:纯 Go 交互式命令行库选型与使用指南
jvm·数据库·python
m0_5145205726 分钟前
Go语言变量如何声明和使用_Go语言变量定义完整教程【通俗】
jvm·数据库·python
John.Lewis30 分钟前
C++进阶(12)附加学习:STL之空间配置器(了解)
开发语言·c++·笔记
weixin_5860614638 分钟前
CSS Grid布局如何解决图片溢出网格单元_设置object-fit与网格尺寸.txt
jvm·数据库·python
计算机徐师兄1 小时前
Python基于农村和城镇人民生活数据的可视化系统(附源码,文档说明)
python·生活·农村和城镇人民生活数据·python人民生活数据·农村和城镇人民生活数据可视化·生活数据可视化系统·python生活数据的可视化
Byron Loong1 小时前
【网络】Python 怎么做TCP通讯
网络·python·tcp/ip