python---使用递归实现谢尔宾斯基三角形及汉诺塔
渐入佳境。
# coding: utf-8
import turtle
'''
# =================turtle练手==
def draw_spiral(my_turtle, line_len):
if line_len > 0:
my_turtle.forward(line_len)
my_turtle.right(70)
draw_spiral(my_turtle, line_len-10)
my_tur = turtle.Turtle()
my_win = turtle.Screen()
draw_spiral(my_tur, 200)
my_win.exitonclick()
# =================分形树==
def tree(branch_len, my_turtle):
if branch_len > 5:
my_turtle.forward(branch_len)
my_turtle.right(20)
tree(branch_len-15, my_turtle)
my_turtle.left(40)
tree(branch_len - 15, my_turtle)
my_turtle.right(20)
my_turtle.backward(branch_len)
my_tur = turtle.Turtle()
my_win = turtle.Screen()
my_tur.left(90)
my_tur.up()
my_tur.backward(100)
my_tur.down()
my_tur.color('green')
tree(100, my_tur)
my_win.exitonclick()
# =================谢尔宾斯基三角形==
def draw_triangle(points, color, my_turtle):
my_turtle.fillcolor(color)
my_turtle.up()
my_turtle.goto(points[0][0], points[0][1])
my_turtle.down()
my_turtle.begin_fill()
my_turtle.goto(points[1][0], points[1][1])
my_turtle.goto(points[2][0], points[2][1])
my_turtle.goto(points[0][0], points[0][1])
my_turtle.end_fill()
def get_mid(p1, p2):
return (p1[0]+p2[0])/2, (p1[1]+p2[1])/2
def sierpinski(points, degree, my_turtle):
color_map = ['blue', 'red', 'green', 'white',
'yellow', 'violet', 'orange']
draw_triangle(points, color_map[degree], my_turtle)
if degree > 0:
sierpinski([points[0], get_mid(points[0], points[1]), get_mid(points[0], points[2])], degree-1, my_turtle)
sierpinski([points[1], get_mid(points[0], points[1]), get_mid(points[1], points[2])], degree-1, my_turtle)
sierpinski([points[2], get_mid(points[2], points[1]), get_mid(points[0], points[2])], degree-1, my_turtle)
my_tur = turtle.Turtle()
my_win = turtle.Screen()
my_points = [[-100, -50], [0, 100], [100, -50]]
sierpinski(my_points, 4, my_tur)
my_win.exitonclick()
'''
# =======================================汉诺塔==
def move_tower(height, from_pole, to_pole, with_pole):
if height >= 1:
move_tower(height-1, from_pole, with_pole, to_pole)
move_disk(from_pole, to_pole, height)
move_tower(height-1, with_pole, to_pole, from_pole)
def move_disk(fp, tp, disk_name):
print('moving 碟子 {0} from {1} to {2}'.format(disk_name, fp, tp))
high = 4
move_tower(high, '起始杆', '末尾杆', '中间杆')


C:\Users\Sahara\.virtualenvs\untitled\Scripts\python.exe D:/test/python_recursion.py moving 碟子 1 from 起始杆 to 中间杆 moving 碟子 2 from 起始杆 to 末尾杆 moving 碟子 1 from 中间杆 to 末尾杆 moving 碟子 3 from 起始杆 to 中间杆 moving 碟子 1 from 末尾杆 to 起始杆 moving 碟子 2 from 末尾杆 to 中间杆 moving 碟子 1 from 起始杆 to 中间杆 moving 碟子 4 from 起始杆 to 末尾杆 moving 碟子 1 from 中间杆 to 末尾杆 moving 碟子 2 from 中间杆 to 起始杆 moving 碟子 1 from 末尾杆 to 起始杆 moving 碟子 3 from 中间杆 to 末尾杆 moving 碟子 1 from 起始杆 to 中间杆 moving 碟子 2 from 起始杆 to 末尾杆 moving 碟子 1 from 中间杆 to 末尾杆 Process finished with exit code 0
python---使用递归实现谢尔宾斯基三角形及汉诺塔的更多相关文章
- Python使用递归绘制谢尔宾斯基三角形
谢尔宾斯基三角形使用了三路递归算法,从一个大三角形开始,通过连接每一个边的中点,将大三角型分为四个三角形,然后忽略中间的三角形,依次对其余三个三角形执行上述操作. 运行效果: 源代码: 1 impor ...
- 【数据结构与算法Python版学习笔记】递归(Recursion)——定义及应用:分形树、谢尔宾斯基三角、汉诺塔、迷宫
定义 递归是一种解决问题的方法,它把一个问题分解为越来越小的子问题,直到问题的规模小到可以被很简单直接解决. 通常为了达到分解问题的效果,递归过程中要引入一个调用自身的函数. 举例 数列求和 def ...
- python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
插图工具使用Python内置的turtle模块,为什么叫这个turtle乌龟这个名字呢,可以这样理解,创建一个乌龟,乌龟能前进.后退.左转.右转,乌龟的尾巴朝下,它移动时就会画一条线.并且为了增加乌龟 ...
- 小练手:用HTML5 Canvas绘制谢尔宾斯基三角形
文章首发于我的知乎专栏,原地址:https://zhuanlan.zhihu.com/p/26606208 以前看到过一个问题:谢尔宾斯基三角形能用编程写出来么?该怎么写? - 知乎,在回答里,各方大 ...
- 分形之谢尔宾斯基(Sierpinski)三角形
谢尔宾斯基三角形(英语:Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出,它是一种典型的自相似集.也有的资料将其称之为谢尔宾斯基坟垛. 其生成过程为: 取一个 ...
- 分形之谢尔宾斯基(Sierpinski)地毯
前面讲了谢尔宾斯基三角形,和这一节的将把三角形变为正方形,即谢尔宾斯基地毯,它是由瓦茨瓦夫·谢尔宾斯基于1916年提出的一种分形,是自相似集的一种. 谢尔宾斯基地毯的构造与谢尔宾斯基三角形相似,区别仅 ...
- 分形之谢尔宾斯基(Sierpinski)四面体
前面讲了谢尔宾斯基三角形,这一节的将对二维三角形扩展到三维,变成四面体.即将一个正四面体不停地拆分,每个正四面体可以拆分成四个小号的正四面体.由二维转变到三维实现起来麻烦了许多.三维的谢尔宾斯基四面体 ...
- 混沌分形之谢尔宾斯基(Sierpinski)
本文以使用混沌方法生成若干种谢尔宾斯基相关的分形图形. (1)谢尔宾斯基三角形 给三角形的3个顶点,和一个当前点,然后以以下的方式进行迭代处理: a.随机选择三角形的某一个顶点,计算出它与当前点的中点 ...
- 【python】递归(阶乘、斐波纳契、汉诺塔)
随机推荐
- 【VMware vSphere】Veeam备份
前言 刚刚整理自己的Onenote笔记,发现有一篇笔记没有整理到博客上面来.因为没有许可证书,所以最后也没有成功,但是还是写在这里吧,万一哪儿天有了许可证书就又可以做试验了~ Veeam Backup ...
- 【转】Python数据类型之“文本序列(Text Sequence)”
[转]Python数据类型之“文本序列(Text Sequence)” Python中的文本序列类型 Python中的文本数据由str对象或字符串进行处理. 1.字符串 字符串是Unicode码值的不 ...
- ethtool 解决网卡丢包严重和网卡原理【转】
转自:https://blog.csdn.net/u011857683/article/details/83758869 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...
- Python备份MySQL数据库【转】
#!/usr/bin/env python # coding: utf- import os import time ''' defined variable ''' databases=['hch' ...
- DUILIB入门简明教程
电子书下载: DUILIB入门简明教程.chm 文章作者: Alberl 电子书制作: 邓学彬 目录: 2013 duilib入门简明教程 -- 前言(1) 2013 duilib入门简明教程 ...
- 【SCOI2010】序列操作
各种繁琐的线段树标记操作...赤裸裸的码农题. 调了一个晚上,最后写篇题解. 题解亮点:代码短,~~跑得慢(连第一页都没挤进去)~~ 其实我跟你们说啊,代码短是好事~~(这里不是说压行好,我的代码不压 ...
- <TCP/IP>链路层小结
图片和部分内容转载自Chang Zhao 这章大致介绍了以太网,以太网帧的格式,网桥和交换机,无线局域网(Wi-Fi),点到点协议,MTU(最大传输单元)的知识点,所谓链路,在此可以解释为 IP数 ...
- java压缩图片质量
使用了工具thumbnailator,据说thumbnailator是一个非常好的图片开源工具,使用起来很方便.不过没仔细看过,我只是需要压缩图片,让其占用空间变小而已.使用maven引入jar包 & ...
- Laravel 5.2--改变数据库字段值,编辑时候,默认选中
模型 <?php namespace App\Models; use App\Helpers\ImageHelper; use App\Libraries\Nestedset\NodeTrait ...
- word发布博客
无向图双连通部件(双连通分量) 关节点和桥边的定义: 双连通部件的性质 每一个双连通部件应该包含至少两个顶点,除非整个无向图只包含一个顶点 如果两个双连通部件包含同一个顶点,那么这个共有的顶点 ...