什么是递归?
答:递归其实是⼀种解决问题的⽅法,在C语⾔中,递归就是函数⾃⼰调⽤⾃⼰。
一个简单的代码如下:
#include <stdio.h>
int main()
{
printf("hehe\n");
main();//main函数中⼜调⽤了main函数
return 0;
}
上述就是⼀个简单的递归程序,只不过上⾯的递归只是为了演⽰递归的基本形式,不是为了解决问
题,代码最终也会陷⼊死递归,导致栈溢出(Stack overflow)。
递归的限制条件是什么?
递归在书写的时候,有2个必要条件:
递归存在限制条件,当满⾜这个限制条件的时候,递归便不再继续。
每次递归调⽤之后越来越接近这个限制条件。
下面看个列子:求n的阶乘。
int Fact(int n)
{
if(n==0)
return 1;
else
return n*Fact(n-1);
}
仔细看代码可以看出我们的思路如下
递归与迭代
递归是⼀种很好的编程技巧,但是很多技巧⼀样,也是可能被误⽤的,就像举例⼀样,看到推导的公式,很容易就被写成递归的形式。Fact函数是可以产⽣正确的结果,但是在递归函数调⽤的过程中涉及⼀些运⾏时的开销。所以如果不想使⽤递归就得想其他的办法,通常就是迭代的⽅式(通常就是循环的⽅式)。如下:
int Fact(int n)
{
int i = 0;
int ret = 1;
for(i=1; i<=n; i++)
{
ret *= i;
}
return ret;
}