C语言-函数递归

嗨喽哈小伙伴们,我又回来了,接着更新,这一期我们来了解C语言的函数递归

C语言-函数递归_第1张图片

说到递归,有人欢喜有人忧啊,对于学懂的同学来说呢,递归是一个非常简单的东西,但是对于没学透的同学呢,递归绝对是一道值得抓耳挠腮的难关,废话不多说,让我们进入今天的主题把

递归是什么?

递归是学习C语⾔函数绕不开的⼀个话题,那什么是递归呢?

int main()
{
	printf("hello");
	main();
	return 0;
}

上述就是⼀个简单的递归程序,只不过上⾯的递归只是为了演⽰递归的基本形式,不是为了解决问 题,代码最终也会陷⼊死递归,导致栈溢出

C语言-函数递归_第2张图片

C语言-函数递归_第3张图片

递归的思想:

把⼀个⼤型复杂问题层层转化为⼀个与原问题相似,但规模较⼩的⼦问题来求解;直到⼦问题不能再 被拆分,递归就结束了所以递归的思考⽅式就是把⼤事化⼩的过程

递归中的递就是递推的意思,归就是回归的意思,接下来慢慢来体会

递归的限制条件

递归在书写的时候,有2个必要条件:

  1. 递归存在限制条件,当满⾜这个限制条件的时候,递归便不再继续
  2. 每次递归调⽤之后越来越接近这个限制条件

在下⾯的例⼦中,我们逐步体会这2个限制条件

递归举例

举例1:求n的阶乘

计算n的阶乘(不考虑溢出),n的阶乘就是1~n的数字累积相乘

分析和代码实现

我们知道n的阶乘的公式: n! =  n ∗ (n − 1)! 

例如:

5! = 5*4*3*2*1

4! = 4*3*2*1

所以:5! = 5*4!

这样的思路就是把⼀个较⼤的问题,转换为⼀个与原问题相似,但规模较⼩的问题来求解的

n!---> n*(n-1)!

(n-1)! ---> (n-1)*(n-2)! ....

直到n是1或者0时,不再拆解

再稍微分析⼀下,当 n<=1 的时候,n的阶乘是1,其余n的阶乘都是可以通过上述公式计算

 n的阶乘的递归公式如下:

C语言-函数递归_第4张图片

那我们就可以写出函数Fact求n的阶乘,假设Fact(n)就是求n的阶乘,那么Fact(n-1)就是求n-1的阶 乘,函数如下

int fact(int a)
{
	if (a <= 0)
	{
		return 1;
	}
	else
	{
		return a * fact(a - 1);
	};
}

int main()
{
	int a = 0;
	scanf("%d", &a);
	int b =  fact(a);
	printf("%d", b);
return 0;
}
  1. 我们在运行时输入5
  2. int b =  fact(a):根据输入的值5,将5也就是a传参给fact函数
  3. int fact(int a):让整型变量fact来接收a的值
  4. if (

你可能感兴趣的:(c语言,开发语言,笔记,考研)