汉诺塔
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步