一、问题分解:将X上的64个盘子移动到Z上:
1.将前63个盘子从X移动到Y上
2.将第64个盘子从X移动到Z上
3.将前63个盘子从Y移动到Z上。
步骤1:将X上的63个盘子移动到Y上
步骤2:将X上的第64个盘子移动到Z上
步骤3:将Y上的63个盘子移动到Z上
三、步骤1进一步分解:
“将X上的63个盘子移动到Y”上可分解为:
步骤4:将X上的前62个盘子移动到Z上
步骤5:将X上的第63个盘子移动到Y上
步骤6:将Z上的前62个盘子移动到Y上
四、步骤3进一步分解:
“将Y上的63个盘子移动到Z上”可分解为:
步骤7:将Y上的前62个盘子移动到X上
步骤8:将Y上的第63个盘子移动到Z上
步骤9:将X上的62个盘子移动到Z上
五、抽象:
步骤1:将前n-1个盘子,由起始柱(借助目标柱)移动到中间柱
步骤2:将第n个盘子由起始柱移动到目标柱
步骤3:将前n-1个盘子由中间柱(借助起始柱)移动到目标柱
六、代码:
>>>def hanoi(n, x, y, z):
if n== 1:
print(x, '-->', z)
else:
#将前n-1个盘子从x(借助中间柱z)移动到y上
hanoi(n-1,x, z, y)
#将第n个盘子从x移动到z上
print (x, '-->', z)
#将前n-1个盘子从y(借助中间柱x)移动到z上
hanoi(n-1,y, x, z)
n = int (input ('请输入汉诺塔的层数:'))
hanoi(n, 'X', 'Y', 'Z')