HANOI数学归纳法

要把大象装冰箱,总共分几步?
匿名sina网友V created at 9-25 9:16, Last updated at 9-25 9:16

要理解递归首先你得理解递归。递归题就是找感觉,要有要把大象装冰箱总共分几步?这样的思维方式,一但去抠细节你就中计了

汉诺塔问题有三根柱子,我给它们分别命名为起始柱src,临时柱tmp,目的柱dst盘子一共分两种情况:1.只有1个盘子这种情况下,直接从起始柱src 移动到 目的柱dst ,完成任务。

2.有1个以上的盘子假如有n个盘子在起始柱,

  1. 首先把第n个盘子上方的n-1个盘子搬到临时柱。
  2. 然后把第n个盘子从起始柱移动到目的柱
  3. 最后把n-1个盘子从临时柱搬到目的柱任务完成

知道这些就够了,千万别XJB去想细节!!!知道这些就够了,千万别XJB去想细节!!!知道这些就够了,千万别XJB去想细节!!!

def move(from,to): #将盘子从from移动到to,动画效果需要脑补
    print(from,'->',to)

def hanoi(n,src,tmp,dst):#将n个盘子从src搬到dst
    if n == 1: #只有一个盘子的情况
        move(src,dst)
    else: #有一个以上盘子的情况
        hanoi(n-1,src,dst,tmp) #将上方的n-1个盘子从src搬到tmp
        move(src,dst) #将第n个盘子从src轻松愉快地移动到dst
        hanoi(n-1,tmp,src,dst) #擦屁股,将tmp上的n-1个盘子搬到dst上


hanoi(3,'A','B','C')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值