b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

只需“3步”,让你玩转汉诺塔——递归算法的妙用

电脑杂谈  发布时间:2019-06-26 12:11:55  来源:网络整理

汉诺塔非递归_汉诺塔递归算法代码_汉诺塔 递归

今天我们来介绍一种很常见的算法——递归。

递归函数

什么是递归?简单的说,递归就是通过不断调用自己,来完成不断循环的一个过程。

3. 在用表达式表示数列的过程中,学生发现项与序号的对应关系,认识到数列是一种特殊的函数汉诺塔递归算法代码,能用函数的观点重新研究数列。 2.1 递归的概念 例1 阶乘函数 阶乘函数可递归地定义为: 2.1 递归的概念 例2 fibonacci数列 无穷数列1,1,2,3,5,8,13,21,34,55,…,被称为fibonacci数列。重点:理解数列的概念,认识数列是反映自然规律的基本数学模型 难点:认识数列是一种特殊的函数,发现数列与函数之间的关系。

1,1,2,3,5,8,13,21......

我们就用递归的思想来实现上面这个数列。

我们假设递归函数为f(x),在编写递归函数时,要注意两点。

一是给定基本情况,这里的基本情况就是f(1)=1,f(2)=1。

二是确定规则,这里的规则就是f(x)=f(x-1)+f(x-2)。

汉诺塔非递归_汉诺塔 递归_汉诺塔递归算法代码

好了,现在我们可以进行函数的编写了:

OK,大功告成!是不是感觉很简单呢?我们来简单分析一下上面的代码:

首先,定义了一个函数叫f(x)。def是define的缩写,意思就是定义。f(x)中的x是项数,表示第几项,比如我们想知道斐波那契数列的第5项是什么,那么x=5。

其次,由于f(1)和f(2)的值都是1,可以把它们合并成x

最后,当x>2的时候,返回的就是前两项的和,此时的f(x-1)和f(x-2)才有意义。

可能说了这么多,你还是会有疑问,那么我们就来举个实例来看下上述代码的运行过程吧。

比如我们想知道f(5)的值,因为5>2,因此返回前两项的和f(4)+f(3)。

那f(4)和f(3)又分别等于多少呢?先来看f(3),因为3>2,因此返回f(2)+f(1)=1+1=2;再来看f(4),因为4>2,因此返回f(3)+f(2)=[f(2)+f(1)]+f(2)=1+1+1=3。

汉诺塔非递归_汉诺塔 递归_汉诺塔递归算法代码

因此,f(5)=f(4)+f(3)=3+2=5。调用我们编写的函数来验证一下:

汉诺塔

我们再来看一个递归的实际应用——汉诺塔游戏。

如上图所示,有3跟杆子A、B、C,其中A上有大小不一的3个圆环,越在下面的圆环越大。我们的目标是,按照现在的顺序把3个圆盘从A挪到C。其中,有2个规则限制:

1.每次只能移动一个圆盘。

2.大的圆盘不能放在小的圆盘上面。

我们先从简单的情况看起吧,假如只有1个圆盘,那很容易,直接把圆盘从A移到C即可。

汉诺塔递归算法代码_汉诺塔 递归_汉诺塔非递归

那2个圆盘的情况呢?我们画个图来说明:

如上图,有1、2两个圆盘,要想把2号圆盘移到C,那么首先需要移动1号圆盘。那1号移到哪里合适呢?很容易看出,1号移到B,那么下一步2号就可以直接移到C;如果1号移到C,那么2号还需要先到B再到C。因此,最快的方法是把1移动到B。

然后,我们就可以把2号圆盘移动到C。

最后,只需要把1号圆盘从B移到C即可。

在网前完成击球动作,身体姿势复原后,向后并步退一步,右髋向右侧方转动,带动右脚移于左脚右侧方,以并步或交叉步移动至底线。在网前完成击球动作,身体姿势恢复后,做一个并步后退步法,右髋向右后方转动,带动右脚移于左脚之后,以并步或交叉步移动至后场。按下后又是个小游戏,要把下面的三个箭头移动到上面,把上面的三个箭头移动到下面,这些箭头可以移动一格,也可以在前面有障碍时跳过一格.如果移错了,可以点右面的按钮重置重新移.实在不会的再看攻略吧.弄好后压下左边的拉杆,把上面一层垃圾箱吸起来,然后再推上拉杆,吊起垃圾箱,这时候垃圾箱只有一层了,再把垃圾箱向右推推到最先的位置,先跳上小台,再跳上垃圾箱,拉长身体,上到控制室里去,移动油罐到合适的地方,滴下几滴油,赶快下来在下面等着,准备好道具,不一会狗就被油给吸引过来,一射中狗狗,然后去和拿雨伞的大妈交换,过关。

汉诺塔非递归_汉诺塔 递归_汉诺塔递归算法代码

接下来,我们就来看3个圆盘的情况。

我们来思考一下,要想把3个圆盘从A移到C,首先需要把3号上面的圆盘1和2移到B,这样3号才能直接到C。

关键的时刻来了,我们把1、2两个圆盘移到B,不就是我们之前讨论的2个圆盘的情况吗?只不过之前的目标是从A移到C,现在是从A移到B,同样是2个空着的杆子,仅仅是编号有差别,本质没有任何区别!

理解了上面的核心内容,我们的思路就变得清晰了。3个圆盘同样可以认为是3大步:第1步,把1和2移到B;第2步,把3移到C;第3步,把1和2从B移到C。而其中1和2如何移到B或者C,就是我们之前讨论的2个圆盘的情况了,这也就是递归的思想。

把上面的例子再拓展一下,如果是n个圆盘呢?

如上图,A上有n个圆盘,我们要把它按这个顺序移到C上。

就跟把大象关进冰箱需要3步一样,我们这个也只需要3步:第1步,把A中从1到n-1个圆盘移到B;第2步汉诺塔递归算法代码,把A中剩下的第n个圆盘移到C;第3步,把B中的n-1个圆盘移到C。至于如何把n-1个圆盘移到B,那就相当于重复我们上面的步骤,直到递归到我们熟悉的2个或3个圆盘所需的移动步骤。

好了,这就是今天的全部内容,欢迎留言讨论。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-108556-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...