递归思想实现汉诺塔游戏攻略

1.介绍
       普通的程序员使用迭代,天才程序员使用递归。什么是递归?下面这个图很形象地表现了递归思想。递归的标准定义是这样的,递归算法(recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。
在这里插入图片描述
2.举例
①斐波拉契数列,第一项和第二项为1,后面的使用以下递推式来求取。
在这里插入图片描述
其实现代码如下

def fib(x):
    if x < 2:
        if x==0:
            return 0
        else:
            return 1
    else:
        return fib(x-1)+fib(x-2)
print(fib(5))

②汉诺塔
       最近在学习python,看到小甲鱼视频里面递归的地方举的汉诺塔的例子,觉得很神奇,实在是妙,因此记录下来。汉诺塔相信大家都玩过,其规则就不说了。说一下玩这个游戏的中心思想,要想实现圆盘从X到Z的移动,且在移动过程中遵守规则(大的圆盘不能放在小的圆盘上面),实质上就是以下三个步骤(这里以7个为例):
(1)将X上的前6个圆盘移到Y上;
(2)将X上剩下的一个最底下的圆盘移到Z上;
(3)将Y上剩下的6个圆盘移到Z上。
在这里插入图片描述
这里来分析一下,在上述的步骤一中要实现X上六个圆盘移动到Y上,这一过程又可以分解为先将前5个移动到Z上,剩下的第六个移动到Y上,再将Z上的五个移动到Y上。这个过程是否很熟悉,是的,和上述三个步骤一样的操作。因此我们只需要递归调用第一个步骤就能实现最后的结果。
具体代码如下:

def hanoi(n, x, y, z):
    if n==1:
        print(x, '-->', z)
    else:
        hanoi(n-1, x, z, y)#将前n-1个圆盘从X移动到Y
        print(x, '-->', z)#将X的最底下的最后一个圆盘移到Z
        hanoi(n-1, y, x, z)#将X的最底下的最后一个圆盘移到Z
n=int(input('请输入汉诺塔层数:'))
hanoi(n,'X','Y','Z')

在这里插入图片描述
输出结果就是实现步骤,不得不说代码很简洁,当时看到代码就像知道整个运行过程具体是怎样的,后来想明白了,以n=3为例,其过程如下:
(1)先判断n是否为1,不为1执行hanoi(2,x,z,y)(2)执行hanoi(2,x,z,y),n又不为1,执行hanoi(1,x,y,z),注意调换y,z(3)执行hanoi(1,x,y,z),此时n=1,打印X-->Z,

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值