Python-函数递归实现n阶科赫曲线(保姆级解释包听懂)

此文章以课本为基础

首先我们把turtle的基本库函数介绍一下

1 turtle.penup() 抬起画笔 turtle.goto() 将第一笔画在哪个坐标

2 turtle.down() 放下画笔

3 turtle,pensize() 改变线条大小

4 turtle.pencolor() 改变线条颜色颜色 

5 turtle.forward(distnce) 向前进

6 turtle.left(angle) 向左转度数

7 turtle.right(angle) 向右转度数

8 turtle.setup() 设置窗口大小

注意:turtle初始方向是向右

初始设置代码

我们先写一下初始设置代码

import time #导入时间库
import turtle #导入海龟
turtle.color("green") #初始设置
turtle.setup(800,500)
turtle.penup()
turtle.goto(-300,100)
turtle.pendown()
turtle.pensize(3)
a=[0,60,-120,60] #这个是角度,一会我们会用到

解释:我们这里解释一下为什么是-120度,因为我们下面为了方便会一直让海龟的方向一直向左转,当我们到下面画红线的地方要向右边转120度,我们用向左表示就是转-120度了

解释:time库,为了看到最后图片的效果,我们想让程序执行完后,停一会,用time.sleep(time)。

既然是写递归,我们要设置一个if判断,去限制递归的条件,我们设置一个n为循环次数具体代码我们可以如下

def kote(len,n,ang):#定义kote函数,里面有参数:len长度,n循环限制参数(科赫曲线阶数),ang角度
    if n==0: #n的限制条件
        turtle.forward(len) #前进画笔
    else:
        for i in ang: #将角度列表[0,60,-120,60]传到循环参数i里面
            turtle.left(i)#海龟旋转i度
            kote(len/3,n-1,ang) #递归调用自身,长度会根据n阶数依次变小

以一阶科赫曲线为例现在我们开始递归吧!!!(保姆级解释开始了)

当我们调用函数传入参数kote(300,1,a)我们传入了300长度,1阶,a角度列表

此时我们进入判断,进入else语句——进入for循环——i循环参数接收角度列表——此时i=0——

海龟向左转0度——进入递归!调用自己传入参数(长度/3=100,n-1=0,传入角度列表)——进入判断语句——进入if语句——此时n==0——海龟向前走100——结束此次函数,回到之前未执行完的for语句中——此时i=60海龟向左转向60度——第二次进入kote函数(100,1,角度列表)调用自己依然是前进100——结束此次调用——回到for循环语句——此时i=-120——海龟向右旋转120度——第三次进入kote函数调用自己(100,1,角度列表)——海龟前进100——回到for循环——此时i=60——海龟向左旋转60度——第四次(最后一次)进入kote函数(100,1,角度列表)——前进100——回到for循环——跳出for循环——结束程序

运行程序我们可以得到下面的图片:

如果我们把n(阶数)写为2,依照上面的思想我们可以得到下面图片:

 三阶科赫曲线:

如果我们将每次得到的图片向右旋转120度,重复三次就得到了我们喜欢的雪花:

 具体代码如下:

import time
import turtle
turtle.color("green")
turtle.setup(800,500)
turtle.penup()
turtle.goto(-300,100)
turtle.pendown()
turtle.pensize(3)
a=[0,60,-120,60]
def kote(len,n,ang):
    if n==0:
        turtle.forward(len)
    else:
        for i in ang:
            turtle.left(i)
            kote(len/3,n-1,ang)
kote(300,3,a)
turtle.right(120)
kote(300,3,a)
turtle.right(120)
kote(300,3,a)
time.sleep(2)

 

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值