赞
踩
递归是学习C语⾔函数绕不开的⼀个话题,那什么是递归呢? 递归其实是⼀种解决问题的⽅法,在C语⾔中,递归就是函数⾃⼰调⽤⾃⼰。
我们先来看一个最简单的递归函数:
- #include <stdio.h>
- int main()
- {
- printf("hehe\n");
- main();//main函数中⼜调⽤了main函数
- return 0; }
当我们尝试运行的时候,可以发现函数陷入了死循环,出现了栈溢出的报错,即会提示出stack overflow的报警。
实际上我们在使用函数的时候,都会在栈空间分配一块内存,而如果这个函数没有进行完,那么这块空间就不会得到释放,而这个函数又永远不会跳出递归,所以便不断地在内存占据空间,这种死递归没有限制,会无限循环下去,而栈内存的空间是有限的,最终便出现栈溢出的报警。
我们现在可以尝试去总结函数递归所应该满足的条件:
计算n的阶乘(不考虑溢出),n的阶乘就是1~n的数字累积相乘。
我们知道n的阶乘的公式: n! = n ∗ (n − 1)!
那我们就可以写出函数Fact求n的阶乘,假设Fact(n)就是求n的阶乘,那么Fact(n-1)就是求n-1的阶乘,函数如下:
- int Fact(int n)
- {
- if(n<=0)
- return 1;
- else
- return n*Fact(n-1);
- }
- #include <stdio.h>
- int Fact(int n)
- {
- if(n<=0)
- return 1;
- else
- return n*Fact(n-1);
- }
- int main()
- {
- int n = 0;
- scanf("%d", &n);
- int ret = Fact(n);
- printf("%d\n", ret);
- return 0;
- }

在这个函数当中,函数在递归的时候不断靠近n=0这一个限制条件,这也完美满足了函数递归的条件。希望大家都能有所收获,喜欢我的话可以点点赞,加个关注,评论一下,谢啦,爱你们。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。