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(4, 'A', 'B', 'C')最后这一行代码 move(n-1, b, a, c)是什么意思?还有就是a,b,c a,c,b b,a,c 为什么顺序会换?谢谢!!!
2 回答
清波
TA贡献165条经验 获得超90个赞
这个就是 函数的参数方面的问题了。
最著名的形式参数(形参),实际参数(实参)的区别:
def func (a, b): print(a, b) func1(b, a) def func1(x, y): print (x, y) ## 定义了两个函数 func 和func1 其中, 定义是所用的 a, b, x, y 都是形参, 而调用时传给函数的参数就是 实参了 func(1, 2) ## 输出 1 2 2 1 ## 解释, 调用 func(1, 2) 这个1 和 2 就是实参。 同样 在 func() 函数中,我们调用了 func1(b,a) 这里面的 b 和 ## a 就是实参了 在这里是 2 和1 。
嗯, 形参和实参的 转换, 基本就是在 函数定义的内部 再次调用函数(如果是其本身 被称为递归调用)的时候。
上面的 汉诺塔递归 就是这种 每次调用 都在做 形参和实参的转换。
萧沐123
TA贡献2条经验 获得超1个赞
这是一种递归调用,move(n-1, a, c, b)是为了将之前的n-1个先放到b上,当这部完成后,move(n-1, b, a, c)则就是将之前已经放到b上的那n-1个再放回到c上,这里的abc都是形式参数,abc顺序的转换就是将不同的值传入递归函数中使其能够执行转换,楼主可以先从3个的汉诺塔开始,按程序一点点的走,更便于理解递归
添加回答
举报
0/150
提交
取消