python汉诺塔

汉诺塔
目标:把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
 

猜你喜欢

转载自www.cnblogs.com/testlmh/p/8862485.html