在调用函数 fun
的过程中,又调用 fun
函数,这是在函数内部调用函数本身,见下图:
这种调用都是无终止的调用,显然程序中不可能出现这种状况,而是应该出现有限次数的、有终止的递归调用,这可以用 if
语句来控制。
即:递归函数的两个要素为递归表达式和递归出口。
用递归的方法求n!。
n!=1*2*3*4.......*(n-1)*n。采用递归的公式可表示为:
即 5!=4!*5,而 4!=3!*4...,1!=1,具体计算过程如下:
#include<stdio.h>
int main()
{
int fac(int n);
int n,y;
printf("please input an integer number:");
scanf("%d",&n);
if(n<0)
printf("data error"); //n不能小于0
else
{
y = fac(n);
printf("%d!=%d\n",n,y);
}
return 0;
}
int fac(int n)
{
int f;
if(n==0||n==1)
f = 1;
else
f = fac(n-1) * n;//关注的是每次调用n的变化
return f;
}
fac(n-1)*n如果n是5,递归的过程为
fac(4)*5
fac(4)=fac(3)*4
fac(3)=fac(2)*3
fac(2)=fac(1)*2
fac(1)=1,返回值是1返回给上级调用
fac(2)=fac(1)*2=2,返回值是2返回给上级调用
fac(3)=f(2)*3=fac(1)*2*3=6,返回值是6返回给上级调用
fac(4)=fac(3)*4=24返回值是24,返回给上级调用
fac(5)=fac(4)*5=120是最终值
递归调用就是外层调用一直调用自己知道满足打断条件
然后内层调用的返回值一层一层向外传递