汉诺塔
目标:把n个盘子从开始位置/start(A),通过中间位置/middle(B),移动到目的位置/end(C)
效果图:
-------->
分三步:
一、把n-1从start(A)通过 middle(C)移动到 end(B) 效果图:
二、把第n个数从 start(A)移动到 end(C) 效果图:
三、把(n-1)整体从start(B),通过 middle(A),移动到 end(C) 效果图:
思路:定义一个函数 hnt(n),实现n从开始位置/start,通过中间位置/middle,移动到目的位置/end
步骤一:调用原函数 hnt(n-1),:n-1从开始位置/start,通过中间位置/middle,移动到目的位置/end
步骤二:把第n个数从 start(A)移动到 end(C)
步骤三:调用原函数 hnt(n-1):n-1从开始位置/start,通过中间位置/middle,移动到目的位置/end
步骤一和步骤三,仅仅需要改变位置参数
代码实现:
1 start = "A" 2 middle = "B" 3 end = "C" 4 5 n =int(input("请输入盘子的数量:").strip()) 6 #定义函数:把n从start通过middle移动到end 7 def hnt(n): 8 global start,middle,end 9 if n==1:#结束条件 10 print("把1移动到%s"%(end)) 11 return 0 12 middle,end=end,middle#准备执行第一步,因此要换顺序 13 #第一步:把n-1从start通过middle移动到end 14 hnt(n-1)#执行第一步 15 middle,end=end,middle#第一步执行完毕,顺序还原 16 17 print("把%s移动到%s"%(n,end))#执行第二部 18 19 start,middle=middle,start#准备执行第三部,换顺序 20 hnt(n-1)#把n-1从middle通过start移动到end 21 start,middle =middle,start#第三部执行完毕,顺序还原。调用n-1才不会乱。
执行结果:
1 请输入盘子的数量:4 2 把1移动到B 3 把2移动到C 4 把1移动到C 5 把3移动到B 6 把1移动到A 7 把2移动到B 8 把1移动到B 9 把4移动到C 10 把1移动到C 11 把2移动到A 12 把1移动到A 13 把3移动到C 14 把1移动到B 15 把2移动到C 16 把1移动到C 17 18 Process finished with exit code 0