递归应用:阶乘
根据阶乘的定义很容易就想到递归方法,做法如下:
int fact(unsigned int n)
{
if(n==0)
return 1;
//递归出口
return n*fact(n-1); //n*Fact(n-1)就是递归式
}
int main(void)
{
printf("10!=%d\n", fact(10));
return 0;
}
因此在计算f(n)的阶乘的时候,如下图所示,需要递归调用函数计算f(n-1),直到遇到递归出口f(0),再将结果逐层返回上层函数,供上层函数计算。
f(10)=10*f(9)=10*9*f(8)=10*9*8*f(7)=…10*9*8*7*6*5*4*3*2*1*f(0)
而根据递归的出口,f(0)为1,然后逐层返回上层函数,则f(10)=10*9*8*7*6*5*4*3*2*1,最近得到10的阶乘。