拆解汉诺塔代码

count=0
def hanoi(n,src, dst, mid):
    global count
    if n == 1:
        print(f"{1}:{src}->{dst}")
        count+=1
    else:
        hanoi(n-1,src,mid,dst)       #第一步:n-1阶从A→B
        print(f"{n}:{src}->{dst}")   #第二步:第n个从A→C
        count+=1
        hanoi(n-1,mid,dst,src)       # 第三步:n-1阶从B→C
    

def main():
    n = eval(input("请输入阶数:"))
    hanoi(n, "A","C","B")
    print(count)
    
main()

# 原理:
# 汉诺塔是典型的函数递归应用的案例,不能简单的用2阶汉诺塔、3阶汉诺塔推理至n阶汉诺塔的方式去理解,必须站在n和n-1的关系去理解。
# 有三个柱子A、B、C,有n阶汉诺塔,从递归的角度考虑,把汉诺塔分为第n个和n-1阶
# 第一步:n-1阶从A→B
# 第二步:第n个从A→C
# 第三步:n-1阶从B→C  
# 
# 自己感悟
# 汉诺塔虽然理解上有些难,但只要多给点时间,还是能够想通的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值