科赫曲线是一种像雪花一样的几何曲线,所以也叫雪花曲线。这是德勒姆曲线的一个特例。本文将使用Python语言实现这一曲线,需要的可以参考。
:
目录
1.递归1.1定义1.2数学归纳法2。递归的使用2.1阶乘2.2字符串求逆3。绘制科赫曲线3.1小结3.2绘制科赫曲线3.3科赫曲线的雪花效应3.4分形几何
1. 递归
1.1 定义
作为一个代码包,一个函数可以被其他程序调用,当然也可以被函数内部的代码调用。这种在函数定义中调用函数本身的方式叫做递归。就像一个人站在满是镜子的房间里,他看到的图像是递归的结果。递归在数学和计算机应用中非常强大,可以非常简洁地解决重要问题。
数学中有一个经典的递归例子叫做阶乘,通常定义如下:
n!=n(n- 1)(n- 2)…(1)
为了实现这个程序,可以通过简单的循环累加来计算阶乘。观察5!计算一下,如果去掉5,那么还剩下4!推广方面,n!=n(n-1)!实际上,这个关系式给出了阶乘的另一种表达方式:
当n=0时,n!=1;否则,n!=n(n - 1)!
这个定义说明0的阶乘定义为1,其他数的阶乘定义为这个数的阶乘乘以一个比这个数小的数。递归不是循环,因为每次递归都会计算一个小于它的阶乘,直到0!0!是一个已知值,被称为递归的基本示例。当递归结束后,你需要一个可以直接计算值的表达式。
阶乘的例子揭示了递归的两个关键特征:
(1)有一个或多个基本示例。基本示例不需要再次递归,它是一个明确的表达式。
(2)所有递归链都应该以一个或多个基本示例结束。
1.2 数学归纳法
数学归纳法和递归都是利用递归的原理,本质是一样的。数学归纳法在证明一个与自然数有关的命题P(n)时,采用以下步骤。
(1)证明当n取第一值n0时命题成立。
(2)假设当nk (k 0,k为自然数)时命题成立,证明当n=NK ^ 1时命题也成立。
综合(1)和(2),命题P(n)对所有自然数n( n n0)成立。
2. 递归的使用方法
2.1 阶乘
以阶乘计算为例,阶乘可以写成单独的函数,函数如下:
定义事实(n):
如果n==0:
返回1
否则:
返回n *事实(n - 1)
Num=eval(input('请输入整数:'))
print(fact(abs(int(num)))
fact()函数在其定义内引用自身,形成一个递归过程(比如第5行)。无限递归会耗尽计算资源,所以需要设计一个基例,使递归逐层返回。fact()函数通过if语句给出了n为0时的基本例子。当n==0时,fact()函数不再递归并返回值1。如果n!=0,递归返回n和n-1阶乘的乘积。
由于负数和小数不能通过减1达到递归的基本示例(n==0),代码的第八行通过abs()和int()函数将用户输入转换为非负整数。这个程序的输出效果如下:
请输入一个整数:5。
120
请输入整数:6.789。
720
遵循递归函数的语义,每次调用都会导致一个新函数的开始,表明它有一个局部变量值的副本,包括函数的参数。每次调用函数时,都会临时存储一份函数参数的副本。在递归中,每个函数都计算自己的参数,这些参数互不影响。当基例完成运算并返回值时,每个函数逐层完成运算,并将计算结果返回给调用者。
使用递归时,一定要注意基例的构造,否则递归返回失败就会报错。
2.2 字符串反转
对于用户输入的字符串,输出反转的字符串。
解决这个问题的基本思想是将字符串视为递归对象。长字符串由较短的字符串组成,每个小字符串也是一个对象。让我们把一个字符串想象成只由两部分组成:第一个字符和剩余的字符串。如果剩余的字符串与第一个字符交换,则整个字符串反转,代码如下:
定义反转:
返回反向((s[1:]) s[0])
观察该功能的工作过程。S[0]是第一个字符,s[1:]是剩余的字符串。把它们反过来连接,就可以得到倒串。执行这个程序,结果如下:
定义反转:
返回反向(s[1:]) s[0]
反向(“abc”)
返回反向(s[1:]) s[0]
[上一行又重复了996次]
递归错误:超过了最大递归深度
此错误表明系统无法执行reverse()函数创建的递归。这是因为reverse()函数没有基例,递归层数超过了系统允许的最大递归深度。默认情况下,递归调用到1000级时,Python解释器会终止程序。递归深度旨在防止无限递归错误。当用户编写的正确递归程序需要1000层以上时,可以通过以下代码设置:
导入系统
sys . setrecursionlimit(2000)# 2000是新的递归级别。
Reverse()超过了递归深度,因为没有设计基础用例。字符串倒置中的递归调用总是使用比以前更短的字符串,所以基例可以设计成字符串的最短形式,即空字符串。
完整的代码如下:
定义反转:
如果s==“”:
返回s
否则:
返回反向(s[1:]) s[0]
Str=input('请输入一个字符串:')
打印(反面(str))
程序执行结果如下:
请输入一个字符串:Python编程
编程程序nohtyP
3. 科赫曲线的绘制
3.1 概要
这是用递归画Koch曲线的例子,分形几何采用了类似递归的核心思想。
自然界中有很多图形是有规律的,符合一定的数学规律。例如,蜜蜂的蜂巢是天然的等边六边形。科赫曲线是众多经典数学曲线中非常著名的,它是由瑞典数学家冯。H-V-科赫(H-V-Koch)在1904年提出的。因为其形状类似雪花,所以又叫雪花曲线。
科赫曲线的基本概念和绘制方法如下:
n为正整数,代表Koch曲线的阶数和生成Koch曲线过程中的运算次数。Koch曲线的初始化阶为0,表示一条长度为L的直线,对于直线L,将其等分为三段,中间一段用边长为L/3的等边三角形的两条边代替,得到一阶Koch曲线,该曲线包含四段线段。进一步对每条线段重复同样的操作,得到二阶Koch曲线。重复同样的操作N次,得到N阶Koch曲线,如下图所示:
3.2 绘制科赫曲线
Koch曲线是分形几何的一个分支,其绘制过程体现了递归思想。绘图过程代码如下:
进口甲鱼
def koch(大小,n):
如果n==0:
turtle.fd(大小)
否则:
对于[0,60,-120,60]范围内的角度:
turtle.left(角度)
科赫(尺寸/3,n - 1)
def main():
turtle.setup(800,400)
Turtle.speed(0) #控制绘图速度。
turtle.penup()
turtle.goto(-300,-50)
turtle.pendown()
乌龟冥想(2)
Koch(600,6) # 0阶Koch曲线长度,阶
turtle.hideturtle()
主()
程序执行结果如下:
画N阶Koch曲线相当于在画笔方向0、60、-120和60处画n-1阶曲线。上面代码中的main()函数设置了一些初始参数。如果要控制绘制Koch曲线的速度,可以使用turtle.speed()函数来提高或降低速度。
3.3 科赫曲线的雪花效果
科赫曲线是从直线画出来的,如果从倒三角形开始会更有趣。用以下代码替换前面代码中的main()函数:
进口甲鱼
def koch(大小,n):
如果n==0:
turtle.fd(大小)
否则:
对于[0,60,-120,60]范围内的角度:
turtle.left(角度)
科赫(尺寸/3,n - 1)
def main():
turtle.setup(600,600)
龟速(1000)
turtle.penup()
turtle.goto(-200,100)
turtle.pendown()
乌龟冥想(2)
级别=5
科赫(400级)
turtle.right(120)
科赫(400级)
turtle.right(120)
科赫(400级)
turtle.hideturtle()
主()
程序执行结果如下:
3.4 分形几何
分形几何是数学的一个分支,以不规则几何为研究对象。基于分形自相似结构,通过无限递归展现复杂曲面下的内在数学秩序。分形几何不仅展示了数学之美,而且揭示了世界的本质,使人们重新审视世界:世界是非线性的,分形无处不在。
这篇关于如何用Python画Koch曲线的文章就到此为止了。有关Python Koch曲线的更多信息,请搜索我们之前的文章或继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。