汉诺塔问题py实现

汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根[金刚石]柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。


就是在下!

我们通过一个函数来实现:move(n, a, b, c)函数,它接收参数n,表示3个柱子A、B、C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的方法
刚开始对于汉诺塔问题理解不够深刻,后期经过讨论总结出以下三个步骤
以总共3个盘子为例,当3个盘子都在A点的时候,需要将2也就是(n-1)个盘子都移到B点上,这样才能将C点空出来,存放最大的那个盘子,所以这一步逻辑表达出来就这样写move(n-1, a, c, b),这一步做完了就接着下一步,把A点的1个盘子移到C点,这里就是确定的数字1,所以第二步的逻辑表达出来就如此写:move(1, a, b, c),接下来就是逻辑上的第三步,将B点上的2个(n-1)盘子移到C点,所以最后一步的逻辑表达出来就如此写:move(n-1, b, a, c)。总体概括一下就是:除了只有一个盘子(一个盘子都不存在循环了)之外,不管总共是2个,3个,4个,5个.....就把它想像划分成3个逻辑体,它就是按那3个步骤来循环,这样就简单了
代码如下:

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

或者是

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

调用函数其输出结果均为:

move(3,'A','B','C')
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C
move(1,'A','B','C')
A --> C
move(5,'A','B','C')
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C
A --> B
C --> B
C --> A
B --> A
C --> B
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C
B --> A
C --> B
C --> A
B --> A
B --> C
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C

小菜鸡的牙牙学语hhh
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 汉诺塔是指这个: 目标是要把所有的盘子从最左边(柱子A)移动到最右边(柱子C),条件是 1)每次只能移动一个盘子 ...
    mouse33333阅读 8,092评论 7 8
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 9,102评论 0 2
  • 林木森: 林木森对苏杭印象,最早可以追溯到幼儿园,再早就想不起来了。幼儿园,苏杭和林木森一样,都不爱吃青菜,可是老...
    宁我阅读 2,778评论 0 1
  • 教官,你就这样不辞而别了,不知不说再见是否还能再相见。忘不掉的是你逗比的笑容和话语,肉肉的脸蛋,加上一顶军帽显得更...
    Tever阅读 2,472评论 0 0
  • 有些羞愧。我写这个之前,已经隔了不知多少年没有看过了,但它对于我来说,算是一个极为经典的电视了。至少以前看过的那么...
    温不开阅读 1,130评论 0 0

友情链接更多精彩内容