【Python学习笔记Day24】4.8 函数之递归三(汉诺塔游戏的算法)

本文介绍使用递归算法解决汉诺塔问题的方法,详细解释了如何将复杂问题分解为更小的子问题,通过递归调用实现64个盘子的移动。通过具体的Python代码示例,展示了算法的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4.8 函数之递归三

汉诺塔游戏的算法

递归求解汉诺塔:
有64的圆盘在一根针上,每次只能移动一片,并且小的圆盘必须在大的圆盘之上,有三根针,使用算法讲64个圆盘移动到另外一个
#对于游戏的可以简单的分解为三个步骤:

1)将前63个盘子从X移动到Y上,
2)将最底下的第63个盘子从X移动到Z上
3)将Y上的63个盘子移动到Z上

继续将问题分解:

问题一:将X上的63个盘子借助Z移到Y上
问题二:将Y上的63个盘子借助X移到Z上

这样每一个问题都可以拆解为:

问题一:将X上的63个盘子借助Z移到Y上-->拆解为
	   1)将前62个盘子从X移动到Y上,
       2)将最底下的第62个盘子从X移动到Z上
       3)将Y上的62个盘子移动到Z上
       
问题二:将Y上的63个盘子借助X移到Z上
       1)将前62个盘子从X移动到Y上,
       2)将最底下的第62个盘子从X移动到Z上
       3)将Y上的62个盘子移动到Z上

这种使用递归的方法就变得很简单易懂

def hanoi(n,x,y,z): #注意:y是辅助,Z是目标,所以hanoi(n,x,z,y)则y是目标,z是辅助
    if n == 1:
        print(x,'-->', z)
    else:
        hanoi(n-1,x,z,y)#将前n-1个盘子从X移动到Y上
        print(x,'-->',z)    #将最底下的第n个盘子从x移动到z上
        hanoi(n-1,y,x,z)#将Y上的n-1个盘子移动到Z上

n = int(input('请输入汉诺塔的层数:'))
hanoi(n,'X','Y','Z')

欢迎大家关注!!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

摆渡沧桑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值