题解 | 汉诺塔

汉诺塔

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

全部评论

相关推荐

12-27 22:49
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务