递归函数之汉诺塔问题
- 规则(A B C 三个塔,盘子都在 A,最后盘子都放到 C)
- 1.每次移动一个盘子
- 2.任何时候大盘子在下面,小盘子在上面
- 方法:
- 1.n = 1:直接把A上的一个盘子移动到C上,A -> C
- 2.n = 2:
- 1). A -> B
- 2). A -> C
- 3). B -> C
- 3.n = 3:
- 1). 把 A 上的两个盘子,通过 C 移动到 B 上,调用递归实现
- 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 上,调用递归实现
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
hano(n-1,A,C,B)
print(A,"-->>",C)
hano(n-1,B,A,C)
A = "A"
B = "B"
C = "C"
n = int(input(">>>请输入汉诺塔初始盘子数量:"))
hano(n,A,B,C)