跳转至

汉诺塔


def dg(num, A, B, C, count=0):
    """
    汉诺塔
    num: 盘子的数量
    count: 操作次数
    """
    # 解决思路:
    # 无论有多少个盘子, 最上面的盘子永远是最小的
    # 下面的所有盘子当作一个整体, 是大盘子
    # 那么只需要3步
    # 下面注释中的第一步、第二步、第三步是针对n>1的情况
    if num == 1:
        count += 1
        print(f'{A}->{C}')  # 第二步: 把大盘子从a放到c
    else:
        count += 1
        count = dg(num-1,A,C,B, count)  # 第一步: 把小盘子从a放到b
        print(f'{A}->{C}')
        count = dg(num-1,B,A,C, count)  # 第三步: 把小盘子从b放到c
    return count


def main():
    print(f"总共需要{dg(1,'A','B','C')}步")
    print()
    print(f"总共需要{dg(2,'A','B','C')}步")
    print()
    print(f"总共需要{dg(3,'A','B','C')}步")


if __name__ == '__main__':
    main()

输出:

A->C
总共需要1步

A->B
A->C
B->C
总共需要3步

A->C
A->B
C->B
A->C
B->A
B->C
A->C
总共需要7步