python实现汉诺塔算法
2024-10-20 06:38:24
汉诺塔
算法分析
1.步骤1:如果是一个盘子,直接将a柱子上的盘子从a移动到c
否则
2.步骤2:先将A柱子上的n-1个盘子借助C移动到B(图1)
已知函数形参为hanoi(n,a,b,c)
,这里调用函数的时候是A柱子上的n-1个,A借助C移动到B,所以调用函数hanoi(n-1,a,c,b)
3.步骤3:此时移动完如图1,但是还没有移动结束,首先要将A柱子上最后一个盘子直接移动到C(图2),调用函数hanoi(1,a,b,c)
4.步骤4:最后将B柱子上的n-1个盘子借助A移动到C(图3),调用函数hanoi(n-1,b,a,c)
这时递归调用就完成了
代码
def hanoi(n,a,b,c):
if n == 1:
print(a,'-->',c)
else:
hanoi(n-1,a,c,b)
hanoi(1,a,b,c)
hanoi(n-1,b,a,c)
# 测试
hanoi(3,a,b,c)
# A --> C
# A --> B
# C --> B
# A --> C
# B --> A
# B --> C
# A --> C
最新文章
- 前端自学vs跟大神系统学?你看着办
- (转载)FT232RL通信中断问题解决办法总结
- Scala入门之函数
- [转发]dsdt解决睡眠唤醒死机
- Win7 DCOM 配置中我的电脑出现红色箭头并且无属性显示的解决方法
- URAL 1658. Sum of Digits(DP)
- 可以使用mysql自己带的config edit
- BZOJ 1051: [HAOI2006]受欢迎的牛 强连通缩点
- stm32上的Lava虚拟机开发进度汇报(1)
- 1008 Gnome Tetravex
- 按自己的想法去理解事件和泛型(C#)
- 面向对象的特性-为String类型的变量扩展一个replaceAll()函数
- Java命令模式以及来自lambda的优化
- UML图学习之三 状态图
- string的常见用法
- VM虚拟机Linux和主机数据传输
- Linux连接redis客户端出现Could not connect to Redis at 127.0.0.1:6379: Connection refused
- omnigraffle 的一些总结
- HDU 1808 Halloween treats(抽屉原理)
- PHP常用算法和数据结构示例