谢尔宾斯基三角形——python递归

article/2025/8/29 17:31:31

在这里插入图片描述

一、 问题描述

类似于分形树,分形三角形——谢尔宾斯基三角形同样是一种分形,由波兰数学家谢尔宾斯基在1915年提出。它是自相似集的例子。它的豪斯多夫维是log(3)/log(2) ≈ 1.585。对于谢尔宾斯基三角形的构造,可以先作一个正三角形,挖去一个“中心三角形”(即以原三角形各边的中点为顶点的三角形),然后在剩下的小三角形中又挖去一个“中心三角形”,我们用黑色三角形代表挖去的面积,那么白三角形为剩下的面积(我们称白三角形为谢尔宾斯基三角形)。如果用上面的方法无限连续地作下去,则谢尔宾斯基三角形的面积越趋近于零,而它的周长越趋近于无限大。

二、问题分析

在分形树——python递归中,因为分形图形每个部分都具有相同形状,因而我们从最基本的情况开始考虑。
在这里插入图片描述
这里,我们先定义try_1(),用turtle按第一个图案所示顺序画出“度”为1的三角形;接着定义tri_2(),即在三个正放的小三角形顶点处调用tri_1();同理定义tri_3()。我们很容易的可以想到递推关系——在“度”为n的三个正放的小三角形顶点处调用函数tri_n-1(),于是便可以画出图示谢尔宾斯基三角形。

三、算法设计

import turtlet = turtle

tri_1()、tri_2()、tri_3()

def tri_1(sd_le=200):	# se_le = side lenth 表示边长"""图示顺序画出三角形"""t.right(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le / 2)t.right(120)t.forward(sd_le / 2)t.right(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le)t.left(120)t.forward(sd_le)t.right(120)def tri_2(sd_le=200):	"""画出'度'为2的三角形"""tri_1(sd_le // 2)t.right(120)t.forward(sd_le / 2)t.left(120)tri_1(sd_le // 2)	# 调用tri_1()t.forward(sd_le / 2)tri_1(sd_le // 2)t.right(120)t.forward(sd_le / 2)t.right(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le)t.left(120)t.forward(sd_le)t.right(120)def tri_3(sd_le=200):"""画出'度'为3的三角形"""tri_2(sd_le // 2)t.right(120)t.forward(sd_le / 2)t.left(120)tri_2(sd_le // 2)	# 调用tri_2()t.forward(sd_le / 2)tri_2(sd_le // 2)t.right(120)t.forward(sd_le / 2)t.right(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le)t.left(120)t.forward(sd_le)t.right(120)

tri()

def tri(n, sd_le=200):	# se_le = side lenth 表示边长if n == 1:t.width(de * 7)t.right(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le / 2)t.right(120)t.forward(sd_le / 2)t.right(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le)t.left(120)t.forward(sd_le)t.right(120)else:t.width(de * 7)tri(n - 1, sd_le // 2)t.right(120)t.forward(sd_le / 2)t.left(120)tri(n - 1, sd_le // 2)t.forward(sd_le / 2)tri(n - 1, sd_le // 2)t.right(120)t.forward(sd_le / 2)t.right(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le)t.left(120)t.forward(sd_le)t.right(120)

和分形树一样,分形三角形的最内层实际上并没有下一层,于是最内层的调用和else下的方法相同,tri()可以优化为:

def tri(n, sd_le=600):	# se_le = side lenth 表示边长if n > 0:tri(n - 1, sd_le // 2)t.right(120)t.forward(sd_le / 2)t.left(120)tri(n - 1, sd_le // 2)t.forward(sd_le / 2)tri(n - 1, sd_le // 2)t.right(120)t.forward(sd_le / 2)t.right(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le)t.left(120)t.forward(sd_le)t.right(120)else:pass

四、完整代码

import turtlet = turtle
t.hideturtle()
t.speed(999)
t.color('grey')
t.width(3)
t.penup()
t.goto(0, 300)
t.pendown()def tri(n, sd_le=600):if n > 0:tri(n - 1, sd_le // 2)t.right(120)t.forward(sd_le / 2)t.left(120)tri(n - 1, sd_le // 2)t.forward(sd_le / 2)tri(n - 1, sd_le // 2)t.right(120)t.forward(sd_le / 2)t.right(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le)t.left(120)t.forward(sd_le)t.right(120)else:passtri(5)
t.done()

五、运行结果

在这里插入图片描述


http://chatgpt.dhexx.cn/article/LafHSZNs.shtml

相关文章

Redis的RDB和AOP总结

目录 1.RDB和AOF是什么 2.RBD 2.1 配置参数 2.1.1 配置文件位置 2.1.2 save 2.1.3 stop-writes-on-bgsave-error 2.1.4 rdbcompression 2.1.5 rdbchecksum 2.1.6 dbfilename 2.1.7 dir 2.2 fork 2.3 如何触发RDB快照 2.3.1 配置文件中默认的快照配置 2.3.2 客户端使用命令sav…

redis RDB设计与实现

redis RDB设计与实现 文章目录 redis RDB设计与实现RDB功能RDB文件的创建和保存SAVE 和 BGSAVERDB保存冲突RDB文件的载入自动保存 RDB 文件结构 RDB功能 为了使Redis储存在内存中的数据库状态保存到磁盘里面防止丢失,Redis提供了RDB持久化功能,将Redis内…

比redis-rdb-tools快10倍的rdb分析工具

背景 为了满足快速分析rdb的情况,对rdr进行测试调研。 测试环境 测试机器:本机macbook pro 工具:rdr,redis-rdb-toolsrdb 文件:dump_7709.rdb,Redis实例大小3G,rdb文件大小1G git地址&…

Redis持久化之RDB原理

Redis持久化之RDB 一.RDB文件作用二. 触发条件三、执行流程1、总体流程2、fork实现复制原理 四、RDB文件五、 启动时加载六、 RDB常用配置总结七、优缺点1、优点2、缺点 个人复习笔记一.RDB文件作用 RDB持久化是将当前进程中的数据生成快照保存到硬盘(因此也称作快照持久化)&a…

Redis RDB持久化

文章目录 一、持久化简介二、数据快照RDB1. save指令2. RDB文件相关配置验证save后数据保存在了rdb文件验证重启服务后,程序会从rdb文件中恢复数据到内存 3. bgsave指令4. 配置自动持久化5. RDB三种启动方式对比6. rdb特殊启动形式7. RDB优缺点 一、持久化简介 什么…

Redis 持久化与故障恢复之rdb

一、摘要 老生常谈一下吧,redis持久化分为rdb和aof两种模式,本篇先说一说rdb模式吧,共分为三部分:1:如何触发rdb持久化, 2:rdb持久化源码, 3:rdb文件解析。 ps:本文基于r…

【Redis】Redis持久化之RDB详解(Redis专栏启动)

📫作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化。文章内容兼具广度深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司…

redis持久化之rdb

redis持久化之rdb RDB相关配置rdb快照的触发条件rdb快照过程rdb文件结构rdb和aof文件的加载顺序 Redis的RDB持久化方式是指将某个时刻的内存数据进行快照,生成.rdb文件可以用于恢复快照时刻redis的内存数据。 RDB相关配置 我们可以在redis.conf中进行rdb相关的配置…

redis之AOF和RDB持久化

写在前面 redis数据存储在内存,为了避免服务器重启或者是宕机导致数据全部丢失,提供了数据持久化机制,有AOF(Append Only File)和RDB,接下来我们分别看下。 1:AOF 如下是我本地环境生成aof文件: 1.1&am…

AOFRDB

序言 主要用于查看不同备份模式可以调优的一些方式. RDB: Redis服务器在规定时间内将内存中的数据保存到指定路径的文件中,服务器重启的时候直接将RDB文件读取到内存中AOF:Redis服务器以日志的形式追加所有的REDIS操作,服务器重启的时候读取AOF文件依次执行一遍. 关于RDB最主…

RDB持久化触发机制

RDB持久化 触发机制 手动触发 手动触发分别对应save和bgsave命令: save命令:同步,在主线程中保存快照;阻塞当前Redis服务器,直到RDB过程完成为止,对于内存比较大的实例会造成长时间阻塞,线上…

Redis RDB 和 AOF

导读 RDB 和 AOF 对比: 持久化方式选择 如果对数据安全性要求极高,应该同时使用两种持久化方式。 如果可以承受若干时间内的数据丢失,可以只使用 RDB 持久化。 不建议只使用 AOF 持久化,因为定时生成 RDB 快照(s…

java读取rdb_剖析Redis RDB文件

通过redis-cli中执行save或者bgsave可以得到RDB文件(文件名由配置文件中dbfilename指定,例如dbfilename "dump.rdb"),这个文件包含Redis实例中全量的数据,那么dump.rdb的文件格式大概是什么样的呢? RDB文件定义 获取RDB…

Redis RDB文件解析

Redis RDB是什么 Redis rdb是Redis快照存储持久化方式,具体就是将Redis某一时刻的内存数据保存到硬盘的文件当中,默认保存的文件名为dump.rdb,而在Redis服务器启动时,会重新加载dump.rdb文件的数据到内存当中恢复数据&#xff0c…

RDB 持久化详解

文章目录 持久化的执行SAVE:阻塞服务器并创建RDB文件BGSAVE:以非阻塞方式创建RDB文件通过配置文件自动创建RDB文件查看最近持久化时间 RDB优化配置1. save2. stop-write-on-bgsave-error3. rdbcompression4. rdbchecksum5. sanitize-dump-payload6. dbfi…

RDB持久化

RDB持久化 一、RDB快照实现二、快照用法三、执行快照时的数据修改四、RDB 和 AOF 合体 一、RDB快照实现 Redis 是内存数据库,但是它为数据的持久化提供了两个技术。 分别是「 AOF 日志和 RDB 快照」。 这两种技术都会用各用一个日志文件来记录信息,但…

RDB底层原理

Redis服务器自动保存功能的实现原理及文件中的各个组成部分 因为Redis是内存数据库,它将自己的数据库状态储存在内存里 面,所以如果不想办法将储存在内存中的数据库状态保存到磁盘里面, 那么一旦服务器进程退出,服务器中的数据库…

Redis持久化原理(RDB)

在上一篇文章中,介绍了Redis的内存模型很重要,从这篇文章开始,将依次介绍Redis高可用相关的知识——持久化、复制(及读写分离)、哨兵、以及集群。 本文将先说明上述几种技术分别解决了Redis高可用的什么问题;然后详细介绍Redis的…

运行程序时出现 应用程序无法启动,因为应用程序的并行配置不正确

最近发布给客户的程序中,双击exe程序出现“应用程序无法启动,因为应用程序的并行配置不正确”,下面提示使用sxstrace跟踪调试应用程序运行时需要的动态库的版本和路径。 于是有以下操作: 步骤: 1.利用管理员身份运行命…

谷歌浏览器出现应用程序无法启动,因为应用程序的并行配置不正确....(亲测完美解决)

电脑开机 完整报错提示为: 应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行 sxstrace.exe 工具。 刚开始也在网上找了N久的解决方案(如:启动windws Mod…