零基础入门学习Python中24讲对汉罗塔游戏没懂,求助
问题如下:1.else后面到底是怎么运行的
2.函数后面x,y,z交换顺序有什么作用
3.调用函数时为什么要加引号 1参考
http://bbs.fishc.com/thread-79183-1-1.html
2 用来表示每一步的操作
3 因为只需要字符串作为形参 递归我一脸懵逼{:10_266:} 本帖最后由 铁棍阿童木 于 2018-2-2 20:15 编辑
首先你要理解这个游戏怎么玩,借用你的代码来解释:
1、x y z 分别代表三根轴(或者针),x 代表圆盘最初所在的轴,z 表示最后需要到达的轴;y代表过渡用的;
2、n代表有多少个圆盘需要移动;
|-- 如果 n == 1 也就是只有一个圆盘需要移动,那么直接从 x 轴移动到 z 轴就行了 --> printg(x," -->",z)
|-- 否则 递归调用自身 youxi(n-1, x,z,y)这里为了把圆盘转移到 z 上去,先要把 n - 1个 圆盘移动到 y 上面才行
print(x,"-->",z) # 上一步递归完成,最后把剩余的最后一个圆盘从 x 移动到 z
youxi(n-1, y,x,z)#然后再递归调用,把在 y 轴上的 n - 1个圆盘借助 x 轴再移动到 z
(这时就完成了圆盘在三根轴上面的来回移动,并且完整的从 x 轴 移动到了 z 轴)
所以,x,y,z需要在调用时交换位置
最后,加括号表示函数被调用,Python解释器将执行函数内部的代码;如果不加括号,表示函数对象,是存在内存中的一个对象而已,Python不会执行内部代码。 def move(n,a,b,c):
if n == 1:
print (a,'-->',c)
return 1
else:
c1 = move(n-1,a,c,b)#首先需要把 (N-1) 个圆盘移动到 b
move(1,a,b,c) #将a的最后一个圆盘移动到c
c2 = move(n-1,b,a,c)#再将b的(N-1)个圆盘移动到c
return c1+c2+1
num = int(input('请输入汉诺塔层数:'))
count = move(num,'a','b','c')
print('移动汉诺塔一共需要 %d 次' % count) 这玩意我记忆犹新,递归你最好只考虑最简单的那一部分,就是层次最浅的又‘五脏俱全’的那一部分,汉诺塔 就是三个盘的时候这个明白了,按这个思路写就行,不要考虑那些 多的(十几,二十几的.....会爆炸的{:5_107:}). 铁棍阿童木 发表于 2018-2-2 20:12
首先你要理解这个游戏怎么玩,借用你的代码来解释:
1、x y z 分别代表三根轴(或者针),x 代表圆盘最初 ...
我懂了,就是定义函数的时候x,y,z没加引号表示形参,加了引号就是实参,然后将其付给形参 暮之洁 发表于 2018-2-3 16:32
我懂了,就是定义函数的时候x,y,z没加引号表示形参,加了引号就是实参,然后将其付给形参
正确
页:
[1]