python科赫雪花递归理解_科赫雪花的python3实现(递归,非递归)
简介:
科赫雪花(科赫曲线)是最早发现的分形曲线之一,由瑞典科学家 Helge von Koch 在论文中构造
科赫雪花的面积趋向于原始三角形的8/5,而周长趋向无穷大
构造过程:
原始三角形
每边三等分
在三等分点上构建新三角形
继续每边三等分
继续在三等分点上构建新三角形
...
科赫雪花可一通过下列规则描述
rewrite system (Lindenmayer system):
Alphabet : F
Constants : +, ?
**Axiom **: F
Production rules: F ? F+F–F+F
程序实现
思路1:
首先我们把三条边分开处理
考虑深度为0的情况,显然这条边是一条直线
考虑深度为1的情况,轨迹如下:
我们把这个轨迹抽象为“前进”方法,我们就有变成了深度为1的前进方法 = 深度为0的前进方法 x4
同理我们发现,深度为2的前进方法 = 深度为1的前进方法 x4
观察到问题的复杂度在不断降低,可以使用递归来处理这样的规律
from turtle import *
def snowflake(lengthSide, levels):
if levels == 0:
forward(lengthSide)
return
lengthSide /= 3.0
snowflake(lengthSide, levels-1)
left(60)
snowflake(lengthSide, levels-1)
right(120)
snowflake(lengthSide, levels-1)
left(60)
snowflake(lengthSide, levels-1)
# main function
if __name__ == "__main__":
speed(0)
length = 300.0
#分别处理三条边
for i in range(3):
snowflake(length, 4)
right(120)
exitonclick()
思路2
把第0层画的线用0表示,第1层用1表示,那么根据画笔的轨迹我们有
第0层(三角形) 000
第1层 011001100110
第2层 022012211221022002201221122102200220122112210220
第1层,其余类似
显然,把上一层的节点复制一遍,中间插入两个当前层次的节点即可。连续相同节点逆时针转120度,非连续相同节点逆时针转60度
from turtle import *
def draw(len,target):
tasks="000"
step,depth = len/(3**target),0
while depth
depth+=1
tasks = ''.join([s+str(depth)*2+s for s in tasks])
pre=''
for task in tasks:
if pre==task:
right(120)
else:
left(60)
forward(step)
pre = task
length = 300.0
draw(length,3)
python科赫雪花递归理解_科赫雪花的python3实现(递归,非递归)相关推荐
- python创建树结构、求深度_数据结构-树以及深度、广度优先遍历(递归和非递归,python实现)...
前面我们介绍了队列.堆栈.链表,你亲自动手实践了吗?今天我们来到了树的部分,树在数据结构中是非常重要的一部分,树的应用有很多很多,树的种类也有很多很多,今天我们就先来创建一个普通的树.其他各种各样的树 ...
- 雪花算法原理_孙略 | 雪花工场
原文发表于<中国摄影>杂志2019年第1期,是为专题"2019:科学世界影像漫游"的一部分.图文作者均为孙略. 孙略1976年生于北京,毕业于清华大学,现任教于北京电影 ...
- C/C++ 二叉树的非递归遍历(前序、中序、后序非递归遍历)
二叉树的非递归遍历C/C++实现: 非递归先序遍历代码: void PreOrderTraversal (struct tree* root) { //非递归先序遍历struct tree* t ...
- python中的类怎样理解_理解Python数据类:Dataclass fields 的概述(下)
原标题 Understanding Python Dataclasses?-?Part 2 ,作者为 Shikhar Chauhan . 这是 Python 最新的 Dataclasses 系列的第二 ...
- python装饰器的通俗理解_简单理解Python装饰器
Python有大量强大又贴心的特性,如果要列个最受欢迎排行榜,那么装饰器绝对会在其中. 刚接触装饰器,会觉得代码不多却难以理解.其实装饰器的语法本身挺简单的,复杂是因为同时混杂了其它的概念.下面我们一 ...
- python实现雪花动态图_如何通过雪花算法用Python实现一个简单的发号器
实现一个简单的发号器 根据snowflake算法的原理实现一个简单的发号器,产生不重复.自增的id. 1.snowflake算法的简单描述 这里的snowflake算法是用二进制的,有64位.其中41 ...
- python中的类怎样理解_深入理解Python中的元类(metaclass)
如何理解python当中的元类 把这个提到外面 class __metaclass__(type): " simple custom metaclass to block adding ne ...
- python解题教学设计的理解_面向计算思维培养的初中 Python 项目式学习教学设计流程构建...
2006 年, 美国卡内基梅隆大学的周以真教授提出了计算思维的概念.计算思维是利用计算机科学的基本理念解决问题.设计系统和理解人类行为的一种方法,并指出计算思维的本质是抽象(Abstraction)和 ...
- python双重for循环怎么理解_理解 Python 的 for 循环
Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 在本篇博客中,我们将讨论 Python 中 for 循环的原理. 我们将从一组基本例子和它的语法开始,还将 ...
- python一切皆对象的理解_在 Python 中万物皆对象
在 Python 中一切都是对象,并且几乎一切都有属性和方法.所有的函数都有一个内置的 __doc__ 属性,它会返回在函数源代码中定义的 doc string:sys 模块是一个对象,它有一个叫作 ...
最新文章
- zmq中zmq_poll()函数介绍
- linux安装grpc占用空间大,grpc linux安装-Go语言中文社区
- IBM连续20个季度营收下滑,但这可能是个好信号
- 【更新】Navicat Monitor v1.7的新功能说明
- 抹机王怎么一键新机_[电脑] [第六届机王争霸赛]水冷组——十年 by ilas 完工
- ckeditor简单使用心得
- 纯数学教程 Page 325 例LXVIII (4) 比值判别法和达朗贝尔判别法失效的一种情形...
- 西安电子科技大学计算机学院推免生资格,西安电子科技大学计算机学院(专业学位)计算机技术保研细则...
- 介绍 Jersey 依赖
- oracle log network server,记录一次ARC1: Destination LOG_ARCHIVE_DEST_2 network reconnect abandoned解决...
- 【产业互联网周报】容联云下周纽交所挂牌;声网Agora因Clubhouse股价周内涨超30%;贝索斯将卸任亚马逊CEO...
- SDN和NFV的主要区别
- [zz] 音频DAC的原理
- 工作4年从美团、360、陌陌、百度、阿里、京东面试程序员的回来感想
- 项目开发技术点、困难点总结——2020-2021年
- @staticmethod静态方法
- China Merchants Bank Beats Rivals In Quality Of Service
- 面试题-渗透测试实习生
- (0091)iOS开发itms-services协议安装IPA安装包
- 机房软件管理服务器及系统软件,高校机房软件自动化部署管理系统的设计及实现...