题解 | 汉诺塔
汉诺塔
https://www.nowcoder.com/practice/dd0dc9588fd94127b594b2adc3ebb346
import sys
ans = list()
def hano(n, a, b, c):
"""
递归实现汉诺塔移动逻辑
:param n: 待移动的盘子数量
:param a: 起始柱子(源柱子)
:param b: 辅助柱子(过渡柱子)
:param c: 目标柱子(目的柱子)
"""
# 递归终止条件:只有1个盘子时,直接从起始柱移动到目标柱
if n == 1:
# 记录移动步骤:格式为"起始柱 目标柱"
ans.append(a + ' ' + c)
return
# 第一步:将n-1个盘子从起始柱a,借助目标柱c,移动到辅助柱b
hano(n-1, a, c, b)
# 第二步:将最底下的第n个盘子从起始柱a直接移动到目标柱c
ans.append(a + " " + c)
# 第三步:将n-1个盘子从辅助柱b,借助起始柱a,移动到目标柱c
hano(n-1, b, a, c)
# 获取用户输入的盘子数量
n = int(input())
# 调用汉诺塔函数,初始柱子为A(起始)、B(辅助)、C(目标)
hano(n, "A", "B", "C")
# 将所有移动步骤用换行符连接后打印输出
print("\n".join(ans))
