C语言学习总结(1)-递归函数的理解

啥是递归?

即是该函数调用它本身自己,这种调用过程称为递归。

递归可以相当于循环,所以想结束递归,就必须有终止递归的条件测试部分,否则就会出现无限递归(即无限循环)。同时,这也是使用递归的难点。

案例

#include 
void recur(int);
int main (void)
{
	recur(1);
	return 0;
}
void recur(int n) //递归函数
{
	printf("第%d级调用\n", n); //#1
	if (n < 4)
	{
		recur(n+1); //递归
	}
	printf("第%d级返回\n", n); //#2
}
  • 输出结果:
第1级调用
第2级调用
第3级调用
第4级调用
第4级返回
第3级返回
第2级返回
第1级返回
  • 解析:
  1. 从结果可以看出,#1和#2相当于循环体,当符合测试条件(即n<4)时,#1部分循环;当测试条件为false时,#2部分循环。
  2. 在递归函数中,位于递归调用之前的语句(即#1部分),按被调函数(即recur())的顺序执行;位于递归调用之后的语句(即#2部分),按被调函数相反的顺序执行。
  3. 每级函数调用都有自己的变量,递归调用就相当于又从头开始执行函数的代码。
  4. 每次函数调用都会返回一次,并且按顺序逐级返回递归。

递归(优缺点)与循环

  • 使用循环的地方都可以使用递归
  • 缺点:
  1. 递归快速耗内存
  2. 不方便阅读和维护
  3. 效率低
  • 优点:
  1. 简洁
  2. 适合解决阶乘、涉及相反顺序的编程问题

尾递归

正好在return语句之前。
尾递归是最简单的递归形式,因为它相当于循环。

从递归函数中,可以隐约的知道所有的C函数皆平等,即是你可以调用我,我可以调用你。
PS:这是Xzhi本人第一次写博客,写博客的目的是与他人分享自己学习的心得,同时是对学习的总结与记录,此文章中若存在bug,欢迎大神们指正。


你可能感兴趣的:(C)