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

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

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

(0)
上一篇 2022年10月12日 下午2:36
下一篇 2022年10月12日 下午2:46


相关推荐

  • tk mapper和mybatis plus_dozermapper

    tk mapper和mybatis plus_dozermapperTKmapper(通用Mapper)和MPmapepr(MyBatis-Plus)是mybatis两大插件,功能相同,都提供了常规的增删改查操作,增强mybatis的功能,篇幅有限,文章仅说下两者的区别!PageHelper是一个分页插件目录TKmapper1.SpringBoot集成2.Example用法3.Mapper接口4.MybatisGeneat…

    2026年4月15日
    6
  • 关于putty连接服务器提示server unexpectedly closed connection解决方法「建议收藏」

    关于putty连接服务器提示server unexpectedly closed connection解决方法「建议收藏」1.今日在对服务器进巡检时,发现无法使用putty连接到服务器,提示错误serverunexpectedlyclosedconnection。之前在连接服务器的时候也没遇到这样的情况,遂在网上进

    2022年7月2日
    68
  • Oracle存储过程及参数理解

    Oracle存储过程及参数理解一、过程(存储过程)    过程是一个能执行某个特定操作的子程序。使用CREATEORREPLACE创建或者替换保存在数据库中的一个子程序。示例1:声明存储过程,该过程返回dept表行数DECLARE  PROCEDUREgetDeptCount  AS    deptCountINT;  BEGIN    SELECTCOUNT(*)INTOdeptCountFROMDEPT…

    2022年7月17日
    26
  • js中获取html元素之document.documentElement

    js中获取html元素之document.documentElementdocument.documentElementDocument.documentElement是一个会返回文档对象(document)的根元素的只读属性(如HTML文档的<html>元素)。对于任何非空HTML文档,调用document.documentElement总是会返回一个<html>元素,且它一定是该文档的根元素。借助这个只读属性,能方便地获取到任意文档的根元素。参考文档html中document.body与document.d

    2022年7月19日
    29
  • 小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

    小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))1c语言与汇编语言器一些对时间要求特别高的时候需要嵌入一些汇编语言,其他时候使用c语言通过位定义和寄存器结构体的方式来实现对dsp寄存器进行访问和控制。2配置SCI寄存器2.1了解SCI寄存器前面我们讲过2812有两个SCI寄存器(SCIA和SCIB),可以做成两个串口(2RS232/2RS484/RS232+RS485)首先我们查看寄存器的寄存器文件以SCIA为例,第一列表示他有13个寄存器可以操作,并且都以SCI开头进行命名;第二列表示地址,即该寄存器所在的位置;后面

    2022年5月11日
    39
  • C语言背包问题

    C语言背包问题0/1背包问题一个旅行者有一个最多能装MM公斤的背包,现在有nn件物品,它们的重量分别是W1,W2,…,WnW1,W2,…,Wn,它们的价值分别为C1,C2,…,CnC1,C2,…,Cn,求旅行者能获得最大总价值。【输入】第一行:两个整数,MM(背包容量,M<=200M<=200)和NN(物品数量,N<=30N<=30);第2..N+12..N+1行:每行二个整数Wi,CiWi,Ci,表示每个物品的重量和价值。【输出】仅一行…

    2022年7月14日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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