算法学习——递归

 

引言

    从这个专栏开始,我们将会一起来学习算法知识。首先我们要一起来学习的算法便是递归。为什么呢?因为这个算法是我很难理解的算法。我希望通过写这些算法博客;来加深自己对于递归算法的理解和运用。当然,学习算法最快的方式便是通过刷题。但是今天这篇博客不会涉及到递归的题,而会涉及到一些关于如何运用递归算法的讨论。

一,递归

1.何为递归

其实递归便是一种自己调用自己的行为。比如说以下代码:

void fun(int n)
{
	if (n == 0)
	{
		return;
	}
	cout << n << endl;

	fun(n - 1);
}

这个代码在自己的函数体里面又调用了自己,所以便构成了递归。

2.递归三部曲

在使用递归的算法时首先便要找到重复的子问题,找到重复的子问题后便可以设计出一个递归函数头。在找到函数头以后的第二步便要找到递归函数的结束条件,这便是函数递归的出口。第三步便是只关心解决一个子问题的步骤然后写出函数体。

总结一下便是如下步骤:

1.找到重复的子问题,设计出函数头。

2.找到函数递归的结束条件,找到递归的出口。

3.只关心一个子问题的解决,设计出函数体。

如斐波那契数列问题。斐波那契数列要我们找到第n个数的值。现在我们根据以上步骤来实现一下斐波那契数列的递归解法。

1.重复的子问题:第n个数的值是前两个数的和。所以只设计一个参数来表明是第几个数。

2.递归结束条件:第一个与第二个数的值是固定的,都是1。所以,当递归到n==1或者n==2时便返回1终止递归。

3.一个子问题的解决方案便是求出前两个数的和,再返回。

代码如下:

int fib(int n)//函数头
{
	if (n == 1 || n == 2)//递归出口
	{
		return 1;
	}

	int sum = fib(n - 1) + fib(n - 2);//函数体

	return sum;
	
}

写在最后:

以上便是对递归的一般使用步骤的说明,接下来便一起进入到递归题目的练习中吧。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值