您的位置:首页 > 编程语言 > Python开发

关于python汉诺塔问题的代码消化理解

2017-02-23 10:47 866 查看
汉诺塔问题来了:

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

我们对柱子编号为a, b, c,将所有圆盘从a移到c可以描述为:

如果a只有一个圆盘,可以直接移动到c;

如果a有N个圆盘,可以看成a有1个圆盘(底盘) + (N-1)个圆盘,首先需要把 (N-1) 个圆盘移动到 b,然后,将 a的最后一个圆盘移动到c,再将b的(N-1)个圆盘移动到c。

请编写一个函数,给定输入 n, a, b, c,打印出移动的步骤:

move(n, a, b, c)

例如,输入 move(3, 'A', 'B', 'C'),打印出:

A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C


先贴一下代码。表忠心。哇哈哈哈~

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

move(6, 'A', 'B', 'C')


我虽然之前学过c和算法,好像也在大学的时候做过这样的问题,但是。。。我记性不好,忘记了

其实我觉得是我当时没认真学习的原因哇哈哈哈哈

最近由于实习嘛,上班没有太多的工作,所以一直在抽空自学python,发现这门语言还挺容易上手的,所以越学越有兴趣呢!

然而,,,,,,然后我就发现这个问题很眼熟,可是还是研究了半天,忧桑~

然后我就想会不会有其他的同学,和我一样有困惑呢,我就实际用我的小手操作了一下,如图:



不怎么聪明的我带入了一下数据 整体看了一下是怎么个流程,然后我想大概我明白了 别人也就该明白了吧 嘻嘻。

代码的理解就是和上面的问题说明是一样的。如果有n个圆盘,就先把n-1个放到b,然后把留下的那个最下面的一个放到c。即是找到了最大的。最大的放在c上面,相当于没有这个最大的了,可不用考虑的(比如说原来是8个盘子,那么现在就是7个盘子的游戏了,因为第8个可以先不用考虑了),然后游戏重新递归,原理是把当前考虑到的圆盘n-1带入n,然后把n-1个放到b,最下面的放到c,直到剩下一个为止,游戏结束!

再解释一句:开始的if中的a-->c的意思是,如果只有一个就直接从a放到c了,下面的a-->c是过程中的变换过程 不是a-->c是换了参数的。嘻嘻嘻 ~不懂的话可以继续问我哦
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: