|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 HenryZhang 于 2018-4-6 21:43 编辑
在第24课,老师讲的汉诺塔步骤代码如下:
----------------------------------------------------------------------------
def hanoi(n, x, y, z):
if n == 1:
print(x, ' --> ', z)
else:
hanoi(n-1, x, z, y) # 将前n-1个盘子从x移动到y上 - 语句1
print(x, ' --> ', z) # 将最底下的最后一个盘子从x移动到z上 - 语句2
hanoi(n-1, y, x, z) # 将y上的n-1个盘子移动到z上 - 语句3
n = int(input('请输入汉诺塔的层数:'))
hanoi(n, 'X', 'Y', 'Z')
-------------------------------------------------------------------------------
虽然老师在视频也讲解了,而且也在代码上注释了,不过作为初学者的我,还是一头雾水,希望大神能帮帮我这个新手小白:
1. 对于这个递归代码的执行顺序问题,首先假设n=5开始执行代码,执行到第二行显然n=5而不等于1,所以往下执行else,在else里面有三个语句,这时候我就蒙了:
问题1:我想问问的是到第一个else开始,是调用执行hanoi(n-1, x, z, y)语句1(这个时候n变成4了)完后再继续执行调用语句1,直到n变成1的时候,再执行主语句下(n等于5的时候)的语句2 print(x, ' --> ', z) 吗? 还是什么顺序啊,如果是先一直调用执行语句1直到n变成1了,那语句3执行的时候,是不是直接就是执行n等于1的情况了啊。这个执行调用顺序我完全蒙了。
2,对于语句1和语句3,比如语句1,为啥把z和y顺序换一下,你就能实现指示从x移动到y上啊,所有的print语句都是写的(x, ' --> ', z)啊,怎么最后能显示出来x->y或者y->z呢 ?对于这个三个参数的位置,还有哪个xyz是参数,哪个xyz是里面赋的值有点彻底混乱了。。。。 |
|