手机壳在线设计网站,优改网logo设计免费官网,学校网站建设问卷调查表,网页设计实验报告分析与体会1.递归的概念 递归是学习C语⾔函数绕不开的⼀个话题#xff0c;那什么是递归呢#xff1f; 递归其实是⼀种解决问题的⽅法#xff0c;在C语⾔中#xff0c;递归就是函数⾃⼰调⽤⾃⼰。 递归的思想#xff1a; 把⼀个⼤型复杂问题层层转化为⼀个与原问题相似#xff0c;但…1.递归的概念 递归是学习C语⾔函数绕不开的⼀个话题那什么是递归呢 递归其实是⼀种解决问题的⽅法在C语⾔中递归就是函数⾃⼰调⽤⾃⼰。 递归的思想 把⼀个⼤型复杂问题层层转化为⼀个与原问题相似但规模较⼩的⼦问题来求解直到⼦问题不能再被拆分递归就结束了。所以递归的思考⽅式就是把⼤事化⼩的过程。 递归中的递就是递推的意思归就是回归的意思。 优点是它可以把代码变得更加清晰具有可读性。 但它也有自己的缺点我们接下来先谈一下递归的两个限制条件再来从此引出对递归缺点的讨论。 2.递归的限制条件 我们先来看一个最简单的递归函数
#include stdio.h
int main()
{printf(hehe\n);main();//main函数中⼜调⽤了main函数return 0; } 当我们尝试运行的时候可以发现函数陷入了死循环出现了栈溢出的报错即会提示出stack overflow的报警。 实际上我们在使用函数的时候都会在栈空间分配一块内存而如果这个函数没有进行完那么这块空间就不会得到释放而这个函数又永远不会跳出递归所以便不断地在内存占据空间这种死递归没有限制会无限循环下去而栈内存的空间是有限的最终便出现栈溢出的报警。 我们现在可以尝试去总结函数递归所应该满足的条件 • 递归存在限制条件当满⾜这个限制条件的时候递归便不再继续。 • 每次递归调⽤之后越来越接近这个限制条件。 上述的函数便是在没有限制中不断死循环才出现了上述的情况。接下来让我们在实例中体会这两个条件的必要之处吧。 3.实例利用递归方法求n的阶乘 计算n的阶乘不考虑溢出n的阶乘就是1~n的数字累积相乘。 我们知道n的阶乘的公式 n n ∗ (n − 1)! 这样的思路就是把⼀个较⼤的问题转换为⼀个与原问题相似但规模较⼩的问题来求解的。 n!--- n*(n-1)! (n-1)! --- (n-1)*(n-2)! .... 直到n是1或者0时不再拆解。 再稍微分析⼀下当 n1 的时候n的阶乘是1其余n的阶乘都是可以通过上述公式计算。 那我们就可以写出函数Fact求n的阶乘假设Fact(n)就是求n的阶乘那么Fact(n-1)就是求n-1的阶乘函数如下 int Fact(int n)
{if(n0)return 1;elsereturn n*Fact(n-1);
} #include stdio.h
int Fact(int n)
{if(n0)return 1;elsereturn n*Fact(n-1);
}
int main()
{int n 0;scanf(%d, n);
int ret Fact(n);
printf(%d\n, ret);return 0;} 在这个函数当中函数在递归的时候不断靠近n0这一个限制条件这也完美满足了函数递归的条件。希望大家都能有所收获喜欢我的话可以点点赞加个关注评论一下谢啦爱你们。