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

彻底晕菜了

写代码时怎么逻辑的???这个题我看明白了,但是不懂代码是什么意思!!!    move(n-1, a, c, b)    print a, '-->', c    move(n-1, b, a, c) 这3行怎么解释的啊???

正在回答

3 回答

我只好把我以前的一个回答粘过来, 题主细细品味下,应该能明白:

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

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

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

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

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

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

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

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

print a,'==>', c

打印的是: 

A --> B

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


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

冬012 提问者

感谢您的回复,不过对于初学者来说,还是有些复杂了,研究了好多别人的方法,总算搞明白了,把我找到的最详细的分析与您分享;http://blog.csdn.net/yafei450225664/article/details/8647908
2016-04-01 回复 有任何疑惑可以回复我~
#2

清波 回复 冬012 提问者

题主分享的link 已读, 特别的好,谢谢
2016-04-05 回复 有任何疑惑可以回复我~
#3

mwmoo3180803 回复 冬012 提问者

这个好赞
2016-04-11 回复 有任何疑惑可以回复我~
def Hanoi(n,a,b,c):
	if n == 1:
		print(a,'-->',c)
	else:
		Hanoi(n-1,a,c,b)
		Hanoi(1,a,b,c)
		Hanoi(n-1,b,a,c)
n = int(input('请输入汉诺塔层数:'))
Hanoi(n,'a','b','c')
如果是三层的话:那么是a-->c , a -- b,之后的那个c --> b是怎么打出来的?
0 回复 有任何疑惑可以回复我~
#1

冬012 提问者

去看一下我前面发的那个博客链接,里面那篇文章解释的非常详细
2016-04-16 回复 有任何疑惑可以回复我~

print语句虽然没变,但是函数里面的参数顺序变了。输出的就是第一个参数-->第三个参数

如果n不为1,就要把a移到b,所以调用move(n-1,a,c,b),此中的c是上面的b,b是c。print a, '-->', c 得到的就是a-->b。

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

冬012 提问者

感谢您的回复,不过对于初学者来说,还是有些复杂了,研究了好多别人的方法,总算搞明白了,把我找到的最详细的分析与您分享;http://blog.csdn.net/yafei450225664/article/details/8647908
2016-04-01 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

彻底晕菜了

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