汉诺塔——递归实例

这篇博客介绍了汉诺塔这一益智玩具的玩法,通过递归算法解决饼的移动问题。文章详细阐述了汉诺塔的规则,并提供了递归函数的实现步骤,包括将n-1块饼借助第三根柱子移动到第二根柱子,然后移动最大的n号饼,最后再将n-1块饼借助第一根柱子移动到第三根柱子。此外,还给出了用户输入饼的数量并调用函数进行演示的代码示例。
摘要由CSDN通过智能技术生成

汉诺塔作为一款益智玩具该怎么玩呢?

我们可以通过递归来实现他

汉诺塔的规则是:

1.要把第一根柱子上的所有饼都移动到第三根柱子上。

2.一次只可以移动一块饼。

3.大饼永远不能放在小饼上面。

饼数较少时还好解决,当饼数越来越多时,需要的步骤也是指数级地增加。所以这时,我们可以通过递归的手段来实现。我们假设有n块饼,序号越大说明这块饼越大。

当饼数为n时,第一步我们需要把n上面n-1块饼借助第三根柱子移动到第二根柱子上

第二步就可以直接把n移动到第三根柱子上了。

第三步再把n-1块饼借助第一根柱子移动到第三根柱子上。

基线条件:

当 n = 1时,我们可以直接把n从第一根柱子移动到第三根柱子。

def hannuota(n:int,A:str,B:str,C:str):
    if n == 1:
        print("将%d号饼从%c移到%c"%(n,A,C))
    else:
        hannuota(n-1,A,C,B)#把n-1块饼从A借助C移动到B
        print("将%d号饼从%c移动到%c"%(n,A,C))
        hannuota(n-1,B,A,C)#把n-1块饼从B借助A移动到C
n = int(input("请输入汉诺塔饼的数量:"))
hannuota(n,'A','B','C')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值