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 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

  

猜你喜欢

转载自www.cnblogs.com/Slxc/p/9705790.html