1. import turtle
  2.  
  3. class Stack:
  4. def __init__(self):
  5. self.items = []
  6. def isEmpty(self):
  7. return len(self.items) ==
  8. def push(self, item):
  9. self.items.append(item)
  10. def pop(self):
  11. return self.items.pop()
  12. def peek(self):
  13. if not self.isEmpty():
  14. return self.items[len(self.items) - ]
  15. def size(self):
  16. return len(self.items)
  17.  
  18. def drawpole_3():#画出汉诺塔的poles
  19. t = turtle.Turtle()
  20. t.hideturtle()
  21. def drawpole_1(k):
  22. t.up()
  23. t.pensize()
  24. t.speed()
  25. t.goto(*(k-), )
  26. t.down()
  27. t.goto(*(k-), -)
  28. t.goto(*(k-)-, -)
  29. t.goto(*(k-)+, -)
  30. drawpole_1()#画出汉诺塔的poles[]
  31. drawpole_1()#画出汉诺塔的poles[]
  32. drawpole_1()#画出汉诺塔的poles[]
  33.  
  34. def creat_plates(n):#制造n个盘子
  35. plates=[turtle.Turtle() for i in range(n)]
  36. for i in range(n):
  37. plates[i].up()
  38. plates[i].hideturtle()
  39. plates[i].shape("square")
  40. plates[i].shapesize(,-i)
  41. plates[i].goto(-,-+*i)
  42. plates[i].showturtle()
  43. return plates
  44.  
  45. def pole_stack():#制造poles的栈
  46. poles=[Stack() for i in range()]
  47. return poles
  48.  
  49. def moveDisk(plates,poles,fp,tp):#把poles[fp]顶端的盘子plates[mov]从poles[fp]移到poles[tp]
  50. mov=poles[fp].peek()
  51. plates[mov].goto((fp-)*,)
  52. plates[mov].goto((tp-)*,)
  53. l=poles[tp].size()#确定移动到底部的高度(恰好放在原来最上面的盘子上面)
  54. plates[mov].goto((tp-)*,-+*l)
  55.  
  56. def moveTower(plates,poles,height,fromPole, toPole, withPole):#递归放盘子
  57. if height >= :
  58. moveTower(plates,poles,height-,fromPole,withPole,toPole)
  59. moveDisk(plates,poles,fromPole,toPole)
  60. poles[toPole].push(poles[fromPole].pop())
  61. moveTower(plates,poles,height-,withPole,toPole,fromPole)
  62.  
  63. myscreen=turtle.Screen()
  64. drawpole_3()
  65. n=int(input("请输入汉诺塔的层数并回车:\n"))
  66. plates=creat_plates(n)
  67. poles=pole_stack()
  68. for i in range(n):
  69. poles[].push(i)
  70. moveTower(plates,poles,n,,,)
  71. myscreen.exitonclick()

运行结果(层数为5):

递归可视化之汉诺塔的动画实现(turtle海龟)的更多相关文章

  1. 递归--练习2--noi6261汉诺塔

    递归--练习2--noi6261汉诺塔 一.心得 先把递推公式写出来,会很简单的 二.题目 6261:汉诺塔问题 总时间限制:  1000ms 内存限制:  65536kB 描述 约19世纪末,在欧州 ...

  2. py_递归实例:汉诺塔问题

    递归的两个特点 调用自身 结束条件 # _*_coding:utf-8 ''' 递归实例:汉诺塔问题 n----盘子总数 a----第一个柱子 b----第二个柱子 c----第三个柱子 n个盘子时: ...

  3. 编程:递归编程解决汉诺塔问题(用java实现)

    Answer: //Li Cuiyun,October 14,2016. //用递归方法编程解决汉诺塔问题 package tutorial_3_5; import java.util.*; publ ...

  4. 学C记录(理解递归问题之汉诺塔)

    汉诺游戏规则如下: 1.有三根相邻的柱子,标号为A,B,C. 2.A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘. 3.现在把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘 ...

  5. python中关于汉诺塔问题和使用turtle库实现其搬运过程

    一.汉诺塔问题 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按 ...

  6. 关于C++的递归(以汉诺塔为例)

    关于C++,hanoi塔的递归问题一直是个经典问题,我们学习数据结构的时候也会时常用到, 因为它的时间复杂度和空间复杂度都很高,我们在实际的应用中不推荐使用这种算法,移动n个盘子, 需要2的n次幂减一 ...

  7. C++入门经典-例4.3-函数的递归调用之汉诺塔问题

    1:代码如下: // 4.3.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...

  8. Python实现汉诺塔问题的可视化(以动画的形式展示移动过程)

    学习Python已经有一段时间了,也学习了递归的方法,而能够实践该方法的当然就是汉诺塔问题了,但是这次我们不只是要完成对汉诺塔过程的计算,还要通过turtle库来体现汉诺塔中每一层移动的过程. 一.设 ...

  9. 运用Turtle实现汉诺塔的可视化运行(递归算法)

    运用Turtle实现汉诺塔的可视化运行(递归算法) 汉诺塔问题又名河内塔问题,是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆 ...

随机推荐

  1. dubbo 在不同协议下携带上下文区别

    如果走原生的dubbo协议,RpcContext.getContext()里的attarchments和values 是能够在节点间传递的 但如果hessian协议,attarchments和valu ...

  2. 面向对象版Tab栏切换

    <div class="wrapper" id="wrapper"> <ul class="tab" id="t ...

  3. 【转】从PowerDesigner概念设计模型(CDM)中的3种实体关系说起

    PowerDesigner概念模型的relationship .inheritance. association 从PowerDesigner概念设计模型(CDM)中的3种实体关系说起

  4. Navicat premium 12破解版

    下载Navicat  Premium 12和破解补丁Navicat_Keygen_Patch,底部有下载地址.下载之后安装Navicat,安装成功后先不要打开,然后打开破解补丁,破解补丁不需要安装,双 ...

  5. python学习笔记之五

    1.Python HTTP server win环境需要加cgi参数 python -m http.server --cgi 8000 其他如下: python -m http.server 8080 ...

  6. 性能测试过程中oracle数据库报ORA-27301 ORA-27302错

    最近在性能测试过程中发现,发现虚拟用户数上不去,加载到一定的数量应用端就报错,提示连接数据库出错.在测试的过程中查看web容器的线程池 数据源的连接池 都还有空闲,同时查看oracle的v$sessi ...

  7. MySQL完整教程(共8章)

    正文 [第一章] 回到顶部 1.1 MySQL学习路线 基础阶段:MySQL数据库的基本操作(增删改查),以及一些高级操作(视图.触发器.函数.存储过程等). 优化阶段:如何提高数据库的效率,如索引, ...

  8. 在VS2015中用C++编写可被C#调用的DLL

    VS2015用C++创建动态库DLL步骤如下: (1)启动VS2015-->文件-->新建-->项目,按图二进行选择,选择Win32项目,弹出创建窗口,如第二张图.注意.net版本根 ...

  9. 魔力Python--经典SQL语法大全

    具体转载自哪里,我也忘记了... 一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明: ...

  10. 使用 nodeJs 开发微信公众号(获取access_token)

    要使用微信提供的功能接口,就需要获取到access_token,这是开发公众号必不可少的一部 access_token有效期20分钟,建议保存起来,过期后在重新获取 获取流程如下: 我将微信相关的操作 ...