python——汉诺塔
- 前言
- 游戏规则
- 代码演示
- 主要代码讲解
- 展示效果
- 致谢
前言
相信大家都曾玩过汉诺塔这个游戏,可是呢,往往就在第六第七个就写不下去了,甚至就在第四第五个,就不知道该怎么办了,下面,我就用python来解决这个问题。
游戏规则
A,B,C三个圆柱,分别为初始位,过渡位,目标位,设A柱为初始位,C位为最终目标位
1. A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘
2. 并且每次移动同一根柱子上都不能出现大盘子在小盘子上
3. 把所有盘的子一个一个按从小到大的顺序移动到柱子C上
4.其每次只能移动一次
代码演示
话不多说,先看源码:
def fn(s, a, b, c):
# 基线条件
if s == 1:
print(a, '→', c)
else:
fn(s-1, a, c, b)
print(a, '→', c)
# 递归条件
fn(s-1, b, a, c)
fn(3, 'A', 'B', 'C')
主要代码讲解
- 在第一行代码中
s为圆盘数,a代表初始位圆柱,b代表过渡位圆柱,c代表目标位圆柱
- 在第六行代码中
将初始位的s-1个圆盘移动到过渡位,此时初始位为a,上一级函数的过渡位b即为本级的目标位,上级的目标位c为本级的过渡位
- 在第九行代码中
将过渡位的s-1个圆盘移动到目标位,此时初始位为b,上一级函数的目标位c即为本级的目标位,上级的初始位a为本级的过渡
展示效果
- 如果参数输入3
A → C
A → B
C → B
A → C
B → A
B → C
A → C
- 如果参数输入4
A → B
A → C
B → C
A → B
C → A
C → B
A → B
A → C
B → C
B → A
C → A
B → C
A → B
A → C
B → C
……(后面太多,这里就只展示两个, 望谅解)
(转载)思维导图:
致谢
最后,感谢你们,我才有今天这样的成绩,继续加油