一共有三个柱子,分别是 A柱、B柱、C柱
现在A柱上有n层汉诺塔,从上往下,每一层大小依次递增,现在将这些汉诺塔从A柱移动到C柱,
在移动过程中要保证小层在上,大层在下,请问需要多少步数?
分析:
# 若汉诺塔只有一层,则步数为1
# 若有两层,第一层到B柱,第二层到C柱,第一层到C柱,步数为3
# 若有三层,第一层到C柱,第二层到B柱,第一层到B柱,第三层到C柱,第一层到A柱,第二层到C柱,第三层到C柱,步数为7
# 那么n层和n-1层有什么关系呢?
# 假设n-1层需要步数为m,则前n-1层从A柱移到B柱需要m步数,把第n层移到C柱需要一步。
# 现在将B柱的n-1层移到C柱,需要m步,则一共用了2m+1步
# 则n-1层和n-2层的关系也是如此
# 从数学角度计算通项公式就是 步数=2^层数-1
layer=input("请输入汉诺塔的层数:\n")
layer=int(layer)
def cal_stp(layer:int,sn=0):
if layer==1:
sn=1
else :
layer-=1
sn=2*cal_stp(layer)+1
return sn
print(cal_stp(layer))
