- 规则:
-
- 每次移动一个盘子
- 任何时候大盘子在下面,小盘子在上面
- 方法:
-
- n=1:直接把A上的盘子移动到C上,A->C
- n=2:
- 把小盘子从A放到B上,A->B
- 把大盘子从A放到C上,A->C
- 把小盘子从B放到C上,B>C
- n=3:
- 把A上的两个盘子,通过C移动到B上去,调用递归实现
- 把A上剩下的一个最大的盘子移动到C上去,A->C
- 把B上的两个盘子,借助于A,挪到C上去,调用递归
- n=n:
- 把A上的n-1个盘子,通过C移动到B上去,调用递归
- 把A上的最大的盘子,移动到C,A->C
- 把B上的n-1个盘子,借助A移动到C上去,调用递归
代码如下:
def hano(n, a, b, c): ''' 汉诺塔的递归实现 n:代表几个盘子 a:代表第一个盘子 b:代表第二个盘子 c:代表第三个盘子 ''' if n == 1: print(a, "-->", c) return None if n == 2: print(a, "-->", b) print(a, "-->", c) print(b, "-->", c) return None #把n-1个盘子,从a塔借助于c塔,挪到b塔上 hano(n-1, a, c, b) print(a, "-->", c) #把n-1个盘子,从b塔借助a塔,挪到c塔上去 hano(n-1, b, a, c) a = "A" b = "B" c = "C"