N天之前,我曾持续过很长的时间写关于C语言的博客,中途有一段时间没有写关于C语言的博客。我想把之前没写完的部分给补充好,于是有了今天的C语言的函数递归,欢迎读者批评指正。

1.函数的递归

什么是递归?

递归其实是一种解决问题的方法,即函数自己调用自己!例如,下面这个main函数的自我调用,就是一个典型的函数递归。

#include <stdio.h>

int main()
{
	printf("nihao!\n");
	main();//函数递归的演示
	return 0;
}

从运行结果中,我们可以看到有很多的nihao!,但是最终也会因此栈溢出,原因在于下图: 

 2.递归的思想

递归其实是把一个大型复杂的问题,化为一个与原问题相似但规模较小的问题,直到子问题不能拆分,递归就结束。递,即是递推的意思;归,即是回归的意思。

递归的限制条件:

(1)递归存在限制条件,当满足此条件时,程序停止;

(2)每次递归调用之后,逐渐停下来。

3.递归的举例1:求n的阶乘

求解一个数的阶乘有很多种方法,如下为其中一种:

int main()
{
	int n = 0;
	scanf_s("%d",&n);
	int i = 0;
	int ret = 0;//定义阶乘的运算结果
	for (i = 0;i<=n;i++)
	{
		if (i != 0)
		{
			ret *= i;
		}
		else
		{
			ret = 1;
		}
	}
	printf("ret=%d\n",ret);
	return 0;
}

上面那种方法有很大的弊端,对此,我们可以使用递归的方法求解!

#include <stdio.h>

int Fact(int num)
{
	if (num == 0)
	{
		return 1;
	}
	else
	{
		return num * Fact(num-1);
	}
}
int main()
{
	int n = 0;
	scanf_s("%d",&n);
	int ret = Fact(n);
	printf("%d\n",ret);
	return 0;
}

4.递归的讲解

我们以3的阶乘为例:

#include <stdio.h>

int Fact(int num)
{
	if (num == 0)
	{
		return 1;
	}
	else
	{
		return num * Fact(num - 1);
	}
}
int main()
{
	int ret = Fact(3);
	printf("%d\n", ret);
	return 0;
}

分析:

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐