小可爱. 发表于 2020-10-31 14:16:30

汉诺塔这个程序有点看不懂

汉诺塔游戏不是每次只能移动一个吗为什么注释上说将n-1个移动到y上

小甲鱼的铁粉 发表于 2020-10-31 15:33:13

意思是接下来的目标就是把剩余的n-1个移动到y上,然后再目标是n-2个,一直递归到1个的时侯return

小可爱. 发表于 2020-10-31 15:37:30

小甲鱼的铁粉 发表于 2020-10-31 15:33
意思是接下来的目标就是把剩余的n-1个移动到y上,然后再目标是n-2个,一直递归到1个的时侯return

那每一次递归y和z都要换一次位置吗

小甲鱼的铁粉 发表于 2020-10-31 15:45:54

小可爱. 发表于 2020-10-31 15:37
那每一次递归y和z都要换一次位置吗

每次输出的是函数中的x->z,每次递归时传入函数的参数的顺序都会改变,改变的原则就是先把n-1个移动到中间的柱子hanoi(n-1, x, z, y),从x移动到y,把剩余的一个移动到最右边的print(x,"-->",z),再把n-1个移动到最右边hanoi(n-1,y,x,z),从y移动到x,所以调用递归函数时有位置,每次都有xyz之间的相互换位子

大神本人 发表于 2020-10-31 16:36:57

考虑三个的情况

A    B    C

1. A --> B 取最上面两个
2. A --> C 取最下面一个
3. B --> C 取刚刚移动到B的两个

现在有N个小方块,也要做同样的事情
很简单,把最下面的那个单独考虑就可以了。不明白的可以回复我们可以讨论

大神本人 发表于 2020-10-31 16:41:56

为啥从N=3开始考虑,因为N=3具有一般性
页: [1]
查看完整版本: 汉诺塔这个程序有点看不懂