算法与数据结构之递归算法

栏目: 编程工具 · 发布时间: 5年前

内容简介:将问题转化为同类问题的子问题进行求解。1.汉诺塔问题:

1.递归算法的核心思想:

将问题转化为同类问题的子问题进行求解。

2.递归算法的应用:

  • 汉诺塔

3.问题分析:

1.汉诺塔问题:

算法与数据结构之递归算法

描述:64个盘子从a移到c,要求一次只能移动一个盘子,并且小盘子在上,大盘子在下。

编写功能函数:

void hanoi(int n,char a,char b,char c)
  • 含义:
    n:盘子数量。
    a,b,c:三个轴。
  • 思路:

    n=1时,只需要将盘子从a移动到C即可。记作:a->c。

    n>1时,进行如下思考:

技巧:

我们知道装大象的步骤如下:

1.打开冰箱

2.装大象

3.关冰箱门

观察如下图:

算法与数据结构之递归算法

接下来,我们将要打开冰箱

算法与数据结构之递归算法

我们发现当n=2时,汉诺塔游戏可以抽象成一个装大象的过程,过程及其简单易懂。

事实上,无论n为多少,我们都可以吧汉诺塔抽象成两个来看,也就是将两个看成一个整体!

算法与数据结构之递归算法

而那两个模块(冰箱)我们又可以把它看成一次大象装冰箱的过程,也就是说3个盘子模块会实现2次装大象的过程。

随着盘子数量越来越多,装大象的过程越来越多,我们可以利用函数调用自身函数达到重复循环装的作用,当然你也可以选择for循环,我们这里讨论递归思想。

语句等价翻译

hanoi(n-1,a,c,b);//该语句代表打开冰箱!  
a->c;//该语句代表装大象!  
hanoi(n-1,b,a,c);//该语句代表关冰箱门!

具体分析:

hanoi(n-1,a,c,b):表示将冰箱从a这个地方绕过c轴到达b轴这个地方。其中n-1代表冰箱!

a->c:表示将a轴上的最后一个模块盘子(最大的,最底部的大象)直接送到c轴上去!

hanoi(n-1,b,a,c):表示将b轴上的的冰箱绕过a关到c轴上!

以上分析表示了装大象的过程,也是汉诺塔游戏的过程。

4.hanoi函数的具体实现:

void hanoi(int n, char a,char b,char c)//定义hanoi函数
{
    if(n==1)
    printf("%c->%c",a,c);//如果只有一个盘子,也就是说只有大象没有冰箱门的时候,直接把大象装进冰箱里
    else
    {
        hanoi(n-1,a,c,b);//打开冰箱
        printf("%c->%c",a,c);//装大象
        hanoi(n-1,b,a,c);//关冰箱门
    }
}

5.主函数的实现:

#include<stdio.h>
int main()
{
    int n;
    printf("请输入盘子个数:\n);
    scanf("%d",&n);
    hanoi(n,a,b,c);//调用函数
    return 0;
}

6.代码实现:

算法与数据结构之递归算法


以上所述就是小编给大家介绍的《算法与数据结构之递归算法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

你不是个玩意儿

你不是个玩意儿

杰伦·拉尼尔 / 葛仲君 / 中信出版社 / 2011-8 / 35.00元

“你不是个玩意儿。” 这句话当然不是骂人,这是一个宣言。人当然不是玩意儿,不是机器,而是人。 在网络化程度越来越高的今天,我们每个人似乎都有足够的理由,无限欣喜地拥抱互联网。然而,你有没有想过互联网那些不完美的设计却是某种潜在的威胁…… 为什么如此多的暴民在社交网站上争吵不休,很多骂人的脏话我们在现实的人际交往中可能从来不会使用,但在匿名网络环境中却漫天飞舞? 互联网的本质......一起来看看 《你不是个玩意儿》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具