为了账号安全,请及时绑定邮箱和手机立即绑定

如下图,谁能解释下面输出内容的意思

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

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


正在回答

2 回答

汉诺塔的递归问题,特别容易被 参数名 给弄混淆,这个问题可以分为两部分来说:

首先,这是一个递归问题,递归问题的思路都是一致的:

首先,递减递归,其次做边界判断。 递减调用:就是题主代码里的第5行,第7行代码; 边界判断: 第2行的if判断。

其次这是一个汉诺塔问题,汉诺塔的问题,就是在除了初始柱外,依次放入次大底盘,且依次从初始柱解放最大底盘,这个问题代入递归的话就需要以下思路:

反向思考,从最简单的只有两个盘子考虑,而后依次递增。 一个盘子的话就是会直接进入if判断,也没什么可以考虑的。

最后说下,汉诺塔的递归思路中最易混淆的“参数名”,在此只做一次说明,在第5行调用

move(n-1,a,c,b)

这次调用move函数时:执行到第6行:

print a,'==>', c

打印的是: 

A --> B


想明白这些,然后从只有三个盘子去套用函数,应该就能明白了,如果还不明白,也不是我打字能说明的了。

2 回复 有任何疑惑可以回复我~
#1

醉大侠 提问者

差不多这个意思
2016-03-25 回复 有任何疑惑可以回复我~

汉诺塔,两个圆盘(把A柱子上面的两个圆盘按照原来的大小顺序移动到C柱子上),把最上面的盘子从A移动到B,再把中间的盘子从A移动到C,最后把B柱子上的盘子从B移动到C。

0 回复 有任何疑惑可以回复我~
#1

醉大侠 提问者

原理我是知道的,程序过程不是很理解
2016-03-24 回复 有任何疑惑可以回复我~
#2

好好的爲甚麽不來 回复 醉大侠 提问者

原理最终的目的是把盘子全部挪动到C处,你可以把最下面的盘子看成一个,其他的盘子看成一个整体,先把其他的盘子挪到B处(递归过程),然后最下面的盘子就可以由A挪动到C处,接下来就是把其他的盘子借助A挪动到C处,过程就类似于前面的过程,进行递归,直到剩下的盘子全部挪动到C处。
2016-03-24 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
初识Python
  • 参与学习       758625    人
  • 解答问题       8667    个

学python入门视频教程,让你快速入门并能编写简单的Python程序

进入课程

如下图,谁能解释下面输出内容的意思

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信