python 汉诺塔

一共有三个柱子,分别是 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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值