python汉洛塔_汉诺塔python用递归实现

python汉洛塔_汉诺塔python用递归实现第一步代码:importturtleclassStack:def__init__(self):self.items=[]defisEmpty(self):returnlen(self.items)==0defpush(self,item):self.items.append(item)defpop(self):returnself.items.pop()defpeek(…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

第一步代码:

import turtle

class Stack:

def __init__(self):

self.items = []

def isEmpty(self):

return len(self.items) == 0

def push(self, item):

self.items.append(item)

def pop(self):

return self.items.pop()

def peek(self):

if not self.isEmpty():

return self.items[len(self.items) – 1]

def size(self):

return len(self.items)

def drawpole_3():#画出汉诺塔的poles

t = turtle.Turtle()

t.hideturtle()

def drawpole_1(k):

t.up()

t.pensize(10)

t.speed(100)

t.goto(400*(k-1), 100)

t.down()

t.goto(400*(k-1), -100)

t.goto(400*(k-1)-20, -100)

t.goto(400*(k-1)+20, -100)

drawpole_1(0)#画出汉诺塔的poles[0]

drawpole_1(1)#画出汉诺塔的poles[1]

drawpole_1(2)#画出汉诺塔的poles[2]

def creat_plates(n):#制造n个盘子

plates=[turtle.Turtle() for i in range(n)]

for i in range(n):

plates[i].up()

plates[i].hideturtle()

plates[i].shape(“square”)

plates[i].shapesize(1,8-i)

plates[i].goto(-400,-90+20*i)

plates[i].showturtle()

return plates

def pole_stack():#制造poles的栈

poles=[Stack() for i in range(3)]

return poles

def moveDisk(plates,poles,fp,tp):#把poles[fp]顶端的盘子plates[mov]从poles[fp]移到poles[tp]

mov=poles[fp].peek()

plates[mov].goto((fp-1)*400,150)

plates[mov].goto((tp-1)*400,150)

l=poles[tp].size()#确定移动到底部的高度(恰好放在原来最上面的盘子上面)

plates[mov].goto((tp-1)*400,-90+20*l)

def moveTower(plates,poles,height,fromPole, toPole, withPole):#递归放盘子

if height >= 1:

moveTower(plates,poles,height-1,fromPole,withPole,toPole)

moveDisk(plates,poles,fromPole,toPole)

poles[toPole].push(poles[fromPole].pop())

moveTower(plates,poles,height-1,withPole,toPole,fromPole)

myscreen=turtle.Screen()

drawpole_3()

n=int(input(“请输入汉诺塔的层数并回车:\n”))

plates=creat_plates(n)

poles=pole_stack()

for i in range(n):

poles[0].push(i)

moveTower(plates,poles,n,0,2,1)

myscreen.exitonclick()

第二步用turtle画(无法截动图)汉罗塔4层如下:

20190327222439223820.png

20190327222439306831.png

20190327222439569537.png

原文:https://www.cnblogs.com/LuDuo/p/10611220.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182784.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • windows文件读取 xxe_XXE漏洞「建议收藏」

    windows文件读取 xxe_XXE漏洞「建议收藏」0x00什么是XML1.定义XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。2.文档结构XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。]]]>DaveTom3.DTDXML文档结构包括XML声明、DTD文档类型定义(可选)…

  • 电压电流转换电路[通俗易懂]

    电压电流转换电路[通俗易懂]前言:昨天看到一篇介绍输出4~20mA电流电路的文章。作者首先介绍了两个直接用运放和三极管搭起来的电路,但并没有给出原理介绍,然后给出了第三种使用集成芯片的电路,并推荐大家使用。不可否认,作为商业产品,集成电路性能优异且更加稳定,方便工程师使用。但是笔者却突然想到了前几天某公司被美国商务部制裁的事件,如果中国的工程师都是“拿来主义”,只会照着参考电路做设计,我们就会永远受制于人,而且对工程师的成长

  • 智慧工地 安全帽识别系统

    智慧工地 安全帽识别系统随着时代的发展科技也越来越发达,近些年来建筑行业在我国怦然兴起,关于建筑方面的隐患也日益增加,为此北京富维图像公司研发了一款智慧工地安全帽识别这项技术,可以有效的避免一些事故的发生。智慧工地安全帽识别这项技术它能有效识别作业过程中突发的危险以及预防危险的到临,以下是关于安全帽识别系统的详细介绍。第一北京富维图像公司对智慧工地安全帽识别系统采用人脸识别功能,可360°识别工作人员是否佩戴安全帽,可以通过前段摄像机进…

  • 联想服务器怎么拆硬盘,联想ThinkStation P900工作站高清拆解[通俗易懂]

    联想服务器怎么拆硬盘,联想ThinkStation P900工作站高清拆解[通俗易懂]【IT168厂商动态】联想不久前推出了全新一代ThinkStationP系列工作站家族,颠覆以往命名,启用以“P”开头的全新命名规则,包括从入门级到旗舰级应用的ThinkStationP300、ThinkStationP500、ThinkStationP700和ThinkStationP900四款产品,而今天我们就对号称“史上最强工作站”的ThinkStationP900进行了拆解。联…

  • gp数据库查看建表语句_gp数据库常用命令

    gp数据库查看建表语句_gp数据库常用命令常用建表结构,根据需求自行更改即可使用!droptableifexistsrpt.rpt_bill_m;createtablerpt.rpt_bill_m(user_idSERIAL,—-自增序列acct_monthvarchar(6),bill_feenumeric(16,2),user_infotext)WITH(app…

  • UDP发送大型文件_不丢包[通俗易懂]

    UDP发送大型文件_不丢包[通俗易懂]先上图1:如果对文件要求不高的话,可以使用UDP,UDP在实际测试中,丢包还是听验证的,但是效率高2:如果文件必须完整,还是使用TCP。Socket进行文件传输,比较稳妥近期的项目中要是用软件升级,系统文件有600M。一般的程序员会说,下载吗,直接下载安装就好了,我也是这样想的,素不知线下的网络的环境有多差,当时一个业务员和我说,要是能实现手机发送文件给设备就好了,毕竟大家都是用手机…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号