编程语言
首页 > 编程语言> > 汉诺塔练习——python(2.番外篇)

汉诺塔练习——python(2.番外篇)

作者:互联网

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

……(后面太多,这里就只展示两个, 望谅解)

致谢

最后,感谢你们,我才有今天这样的成绩,继续加油

标签:圆柱,本级,python,代码,汉诺塔,fn,过渡,番外篇,初始
来源: https://blog.csdn.net/weixin_46491509/article/details/105763388