汉诺塔问题递归求解(python)

汉诺塔问题递归求解(python)


汉诺塔(Hanoi)问题

古代有一个梵塔,塔内有三个座x,y,z坛,x座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个和尚想把这64个盘子从x座移到z座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以借助y座进行过渡。

def hanoi(n,x,y,z):
    '递归从x把所有盘子借助y移到z上'

    global count
    if n == 1: # 直接完成的状态
        print(x,'-->',z) # 表示移动
        count += 1
    else: # 需要分解,分析方法是先把三个步骤每一个都看成“大的完整的”一步,思想上不要再拆下去
        hanoi(n-1,x,z,y) # 1、把上边所有盘子从x借助z移到y上
        print(x,'-->',z) # 2、把最底层那一个盘子移到z上
        count += 1
        hanoi(n-1,y,x,z) # 3、把上边所有盘子从y借助x移到z上

while 1:
    count = 0   # 步数记录
    n = int(input("请输入汉诺塔层数:"))
    hanoi(n,'x','y','z')
    print(count)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值