有三根柱子一次为A,B,C 现在A柱子上有3个块,按照汉诺塔规则移动到C柱子上去,打印步骤?

我们这样理解:A为原始柱,C为目标柱,B为缓冲柱

1.定义一个函数move(n,a,b,c),n为原始柱上面的块数,a为原始柱名称,b为缓冲柱,c为目标柱

def move(n,a,b,c):
pass

2.首先,我们假定原始柱上只有一个块,那就是直接从原始柱移动到目标柱,无需经过缓冲柱

def move(n,a,b,c):
if n == 1:
print(a,'-->',c)
else:
pass

3.当原始柱上不止一个块的时候,我们先将上面n-1个块移动到缓冲柱上面,此时方法中的目标柱就是缓冲柱(请注意参数位置)

def move(n,a,b,c):
if n == 1:
print(a,'-->',c)
else:
move((n-1),a,c,b)
pass

4.移动完成之后此时在三根柱子上就是原始柱上有编号n的最大块,缓冲柱上有n-1个块,我们将最大块移动到目标柱上

def move(n,a,b,c):
if n == 1:
print(a,'-->',c)
else:
move((n-1),a,c,b)
print(a,'-->',c)
pass

5.最后一步,将缓冲柱子上的n-1个块移动到目标柱上

def move(n,a,b,c):
if n == 1:
print(a,'-->',c)
else:
move((n-1),a,c,b)
print(a,'-->',c)
move((n-1),b,a,c)

方法定义以及调用过程截图如下:

总结:整个过程中原始柱,缓冲柱,目标柱的角色不停地发生变化,当你把握住这点后,便可以轻松的使用递归调用来解决此问题

最新文章

  1. Python3 面向对象(基础篇)
  2. go 聊天室简单版总结
  3. visual studio code 安装python扩展
  4. mysql通过data文件恢复数据库的方式
  5. Tools - Markdown
  6. offsetleft、offsetTop、offsetParent的兼容性问题
  7. atitit.GMT UTC Catitit.GMT UTC CST DST CET 星期 月份 节日 时间的不同本质and起源
  8. php基础27:文件写入
  9. JSon_零基础_003_将Map集合对象转换为JSon格式的对象字符串,返回给界面
  10. jquery dialog-优雅的弹出框
  11. UNIX基础知识之程序和进程
  12. Animator Override Controllers 学习及性能测试
  13. C语言得到当前系统时间
  14. memcached预热失败
  15. 2017 年的 人生 hard 模式终于结束了,2018年回归初心(二)
  16. odoo12 物流 自动计算运费 ,采购销售使用不同计量单位自动换算
  17. java笔记----获取项目resource中class下的路径
  18. SpringBoot入门教程(十四)导出Excel
  19. JDK 5~8的特性对比
  20. SELinux简介(转载)

热门文章

  1. 简化Kubernetes应用部署工具-Helm
  2. 【Jmeter】压测mysql数据库中间件mycat
  3. Python中 如何使用telnet 检测端口是否通
  4. Linux下部署 jar包
  5. Linux命令详解-rmdir
  6. php5权限控制修饰符,interface和abstract
  7. HDU 5651 组合+逆元
  8. python 重新修炼之路
  9. 部署Jsp网站
  10. java程序设计基础篇 复习笔记 第三单元