C语言_函数的递归
N天之前,我曾持续过很长的时间写关于C语言的博客,中途有一段时间没有写关于C语言的博客。我想把之前没写完的部分给补充好,于是有了今天的C语言的函数递归,欢迎读者批评指正。递归其实是把一个大型复杂的问题,化为一个与原问题相似但规模较小的问题,直到子问题不能拆分,递归就结束。归,即是回归的意思。递归其实是一种解决问题的方法,即函数自己调用自己!例如,下面这个main函数的自我调用,就是一个典型的函数递
·
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;
}

分析:

更多推荐


所有评论(0)