python--汉诺塔问题

  

-汉诺塔问题

  -规则:

    1、每次只能移动一个盘子

    2、任何一次移动,三个塔的状态必须是小盘子在上,大盘子在下

  -方法:

    1, n = 1 :直接把A上的盘子移动到C上,A->C

    2, n = 2:

      1.把小盘子从A放到B上,A->B

      2.把大盘子从A放到C上,A->C

      3.把小盘子从B放到C上,B->C

    3,n = 3 :

      1.把A上的两个盘子,通过C移动到B上去(同2),调用递归实现

      2.把A上剩下的一个最大移动到C上, A->C

      3.把B上两个盘子借助A挪到C上,调用递归

    4,n = n:

      1.把A上的n-1个盘子,借助于C移动到B上去,调用递归

      2.把A上的最大盘子,也是唯一一个,移动到C上,A->C

      3.把B上的n-1个盘子借助A移动到C上,调用递归

 #1 把n-1个环从A柱放在B柱子上: hano(n-1, a, c, b)
#2 把最大的环从A柱放在C柱子上: hano(1,a,b,c)或者print(a, "-->", c)
#3 把n-1个环再从B柱子上转移到C柱子上: hano(n-1,b,a,c)


1
def hano(n, a, b, c): 2 ''' 3 汉诺塔的递归实现 4 :param n: 代表几个盘子 5 :param a: 代表a塔,开始的塔 6 :param b: 代表b塔,中间过渡塔 7 :param c: 代表c塔,目标塔 8 :return: 9 ''' 10 if n == 1: 11 print(a, "-->", c) 12 return None 13 ''' 14 if n == 2: 15 print(a, "-->", b) 16 print(a, "-->", c) 17 print(b, "-->", c) 18 return None 19 ''' 20 #把n-1个盘子,从a塔借助于c塔,挪到b上去 21 hano(n-1, a, c, b) 22 print(a, "-->", c) 23 #把n-1个盘子,从b塔,借助于a塔挪到c塔上去 24 hano(n-1, b, a, c) 25 26 a = "A" 27 b = "B" 28 c = "C" 29 n = 3 30 hano(n, a, b, c)

 

运行结果:

A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C

 

 

 

 

 

 

 

 

 

 

 

 

 

  

posted @ 2018-09-26 11:12  Supl  阅读(330)  评论(0编辑  收藏  举报