定义:在函数调用时,直接或间接地自己调用自己的函数;
分为两种调用:直接调用(自己调用自己)、间接调用(a→b→c→a);
示例,以求n!为例:
#include<stdio.h>
int resucsion(int a);
int main(void)
{
int n=0,result=0;
printf("please input a number:\n");
scanf("%d",&n);
result=resucsion(n);
pritnf("%d!=%d\n",n,result);
return 0;
}
int resucsion(int a)
{
int sum;
if(a == 1)
{
sum=1;
}
else
{
sum=a*resucsion(a-1);
}
return sum;
}
递归函数有两个阶段:
第一个阶段:递推,将原问题分解为新问题,由已知找未知,最终达到已知的条件,即递归结束的条件;
第二个阶段:回归,从已知的条件出发,逐一返回值,最终到达递推开始处;
递归调用的特点:
①递归调用不是复制该函数,每次调用时,新的局部变量和形参会在内存中重新分配内存单元,并以新的变量重新开始执行;即每一次调用就会开辟一个新空间;每次调用层的局部变量和形成释放后,并返回上次调用自身的地方继续执行;
②递归调用一般不节省内存空间,因为每次调用都要产生一组新的局部变量,从而不破坏上层的局部变量;
③递归调用不会加快程序的执行速度,因为每次调用都要保护上层局部变量(现场),而返回时又要恢复上层局部量,占用执行时间;