递归-汉诺塔

本文介绍了递归算法的基本原理及其在计算机科学中的应用,强调了递归的三个关键特点。以汉诺塔游戏为例,详细阐述了递归算法在解决实际问题中的思路和步骤,并提供了相应的Python代码实现。通过递归函数hanoi,将汉诺塔问题分解为子问题,逐步将所有盘子从A柱移动到C柱。同时,注意到了递归效率较低和必须设置明确的结束条件。
摘要由CSDN通过智能技术生成

递归原理:

 递归算法(英语:recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念,递归算法有三个特点:

        1) 递归的过程一般通过函数或者子过程来实现。

        2) 递归算法在它内部来直接或者间接的调用自身的算法。

        3) 递归算法就是把规模大的问题转换为规模小的问题,然后递归调用函数来求解的过程。

        递归算法也有几点需要注意的事项,在前面递归函数中我们也提到过,分别是:

        1) 递归是在函数本身调用函数本身。

        2) 递归的效率比较低,如果有时间限制不建议使用。

        3) 递归过程中需要有一个明确的结束条件,即递归出口。


汉诺塔是一种古老的游戏。一共3个柱子,标号为1,2,3。1号柱子有从大到小一共n个盘子。每次移动最上方的一个盘子,可以移动到其他的柱子。任何一个盘子,都不能叠在比它更小的盘子的上方。请把盘子从1号柱子,全部移动到3号柱子。

开始:

图片2.png

结束:

图片3.png

代码:

i = 1
def move(n,fr,to):
    global i
    print('这是第%d步:把%d号盘子从%s移到%s'%(i,n,fr,to))
    i += 1
def hanoi(n,a,b,c):
    if n == 1:
        move(1,a,c)
    else:
        hanoi(n-1,a,c,b)
        move(n,a,c)
        hanoi(n-1,b,a,c)

#if _name_ == '_main_':
n = int(input('输入A上面盘子的数量:'))
print('移动开始')
hanoi(n,'A','B','C')

思路:

代码主要部分就是递归部分,看懂这段代码要先知道汉诺塔的本质是什么,因为就三个柱子,从A到C,中间有个B,可以将B看作辅助柱,现在将盘子的数量n从1开始加,n = 1时,A到C,n = 2时,A到B,A到C,B到C

n = 3时开始复杂,这是可以先进行分析,一共三个盘子,我们要做的是把三个盘子从A移到C,而且大的在下面,可以把题目分解为,先把最下面的大盘子移到C,那么剩下的两个在辅助柱B,而此时A是空的,接着把B的大盘移到C,A成为辅助柱,这便是

hanoi(n-1,a,c,b)
move(n,a,c)
hanoi(n-1,b,a,c)

这段代码的原因。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值