关于递归

所谓递归,我个人理解就是自己调用自己

递归有三个条件:

1、前进(规模缩小)

2、边界条件

3、返回段

下面我们通过一个函数举例:

int Age(int n)
{
   int tmp;
   if(n == 1)
      tmp = 10;
   else
   tmp = Age(n-1)+2;
   return tmp;
}

这段代码是计算关于第n个人的年龄的递归算法

如果将其写成循环的写法,就是下面的代码

int Age1(int n)
{
    int i;
    for(i = 0; i < n;i+=2);
    return i;
}

貌似看起来更简单了一些,这确实,很多时候循环的写法比递归更容易让人理解,而且比递归要简单很多,那为什么我们还是要学习递归算法呢?当然是因为递归算法有他的特点和好处,我们通过下面这个题目来仔细了解一下递归的有点。

相传印度有个古老的传说:在一座庙里有三根宝石针,其中一根上面穿了64个大小不一的金片,就是所谓的汉诺塔。然后有这样的规则:一次只移动一片,不管在哪根针上,小片必须在大片上面。只要将64片金片移动到另一根银针上,有小到大排列,世界就会在一声霹雳中毁灭。

汉诺塔是个悲伤的故事,那我们思考一下如何用递归解决汉诺塔问题呢?

首先我们肯定要定义三个宝石针:

void Hanoi(int n,char a,char b,char c)

其次当银针上的金片数量先从一开始:

if(n == 1)
    {
        Move(a,c);
    }

我们就可以直接让其返回到目标位置。

其次每次增加我们都可以让n-1个金片移动到目标位置,其次再按顺序将最后一个移到目标位置

完整代码如下:

void Hanoi(int n,char a,char b,char c)
{
	if(n == 1)
	{
		Move(a,c);
	}
	else
	{
		Hanoi(n-1,a,c,b);
		Move(a,c);
		Hanoi(n-1,b,a,c);
	}
}

相反,如果使用循环写就会十分麻烦,各位有兴趣可以试着用循环写一下,感受一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目:使用AngularJs编写的简单 益智游戏(附源代码)  这是一个简单的 javascript 项目。这是一个拼图游戏,也包含一个填字游戏。这个游戏玩起来很棒。有两个不同的版本可以玩这个游戏。你也可以玩填字游戏。 关于游戏 这款游戏的玩法很简单。如上所述,它包含拼图和填字游戏。您可以通过移动图像来玩滑动拼图。您还可以选择要在滑动面板中拥有的列数和网格数。 另一个是填字游戏。在这里你只需要找到浏览器左侧提到的那些单词。 要运行此游戏,您需要在系统上安装浏览器。下载并在代码编辑器中打开此项目。然后有一个 index.html 文件可供您修改。在命令提示符中运行该文件,或者您可以直接运行索引文件。使用 Google Chrome 或 FireFox 可获得更好的用户体验。此外,这是一款多人游戏,双方玩家都是人类。 这个游戏包含很多 JavaScript 验证。这个游戏很有趣,如果你能用一点 CSS 修改它,那就更好了。 总的来说,这个项目使用了很多 javascript 和 javascript 库。如果你可以添加一些具有不同颜色选项的级别,那么你一定可以利用其库来提高你的 javascript 技能。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值