算法学习——递归

算法学习——递归_第1张图片

 

引言

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

一,递归

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;
	
}

写在最后:

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

 

你可能感兴趣的:(算法学习——递归,算法,学习,c++,学习笔记,笔记,Cpp)