qq4625817 发表于 2020-11-13 00:26:05

关于汉诺塔游戏的问题


if n == 1:

      print(a, '-->', c)

    else:

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

      move(1, a, b, c)

      move(n-1, b, a, c)
这段代码中我一直想不明白为什么python可以理解move(n-1, a, c, b)这一段,就是把c跟b换一个位置然后python可以输出A --> B,
百度了没找到答案,有也是解释代码为什么这么写,但我还是不明白为什么abc能换掉位置,可能是我蠢吧 = =!

羽翮 发表于 2020-11-13 08:41:43

这个是递归调用是么,我理解的是原本函数中move(n,a,b,c)中的a,b,c可以看做是形式参数,调用时的n-1,b,a,c可以看做是调用函数时的实际参数。
譬如举个例子:
def mod(x,y):
    return x%y

y = int(input("输入正整数1:"))
x = int(input("输入正整数2:"))
result = mod(y,x)
print("余数是:%d "%result)

这个样子吧……

LuLD 发表于 2020-11-13 08:43:55

我一直认为是 因为 变量名产生的认知干扰,同一字母,小写的是变量名,大写的是 值,把变量名换一个自己比较好理解的名字,再去一步步的解读比较好

qq4625817 发表于 2020-11-13 18:29:40

羽翮 发表于 2020-11-13 08:41
这个是递归调用是么,我理解的是原本函数中move(n,a,b,c)中的a,b,c可以看做是形式参数,调用时的n-1,b,a,c ...

说到形式参数和实际参数就明白了,函数赋值以后,函数里的a就是A,b就是B,c=C,所以在下面的代码中更换参数位置就可以,谢谢解答。

qq4625817 发表于 2020-11-13 18:30:12

LuLD 发表于 2020-11-13 08:43
我一直认为是 因为 变量名产生的认知干扰,同一字母,小写的是变量名,大写的是 值,把变量名换一个自己比 ...

谢谢解答。
页: [1]
查看完整版本: 关于汉诺塔游戏的问题