C++语言程序设计

| 图5-9

例如，我们用函数递归来编写计算阶乘的C++函数：

| 例5-15

int Fac(int n)
{
if (n == 0)
return 1;
else return n *Fac(n - 1);
}

程序中给出的函数Fac是一个递归函数。主函数调用Fac后即进入函数Fac执行，如果n=0时函数停止执行，否则就递归调用Fac函数自身。由于每次递归调用的实参为n-1，即把n-1 的值赋予形参n，最后当n-1的值为0时，将使递归终止，并可逐层返回。

| 图5-10

输出m的值，结束
下面我们再举例说明该过程：设执行本程序时输入5， 即求 5的阶乘。在主函数中的调用即为Fac (5)，进入Fac函数后，由于n = 5，不等于0或1，故应执行n*Fac (n-1)，即5*Fac (5-1)。该语句对Fac作递归调用即Fac (4)。 如此逐次递归展开，进行五次递归调用后，Fac函数形参值变为0，故不再继续递归调用而开始逐层返回到主调函数。Fac(0)的函数返回值为1，Fac(1)的函数返回值为1*1=1，ff(2)的返回值为1*2=2，ff(3)的返回值为2*3=6，ff(4) 的返回值为
6*4=24，最后返回值ff(5)为24*5=120。