发布日期:2015-12-22 09:25 来源: 标签: 编程语言 C++教程 C++函数 C++函数递归调用
一个函数在它的函数体内调用它自身称为递归调用, 这种函数称为递归函数,C++允许函数的递归调用。在递归调用中,递归函数反复调用其自身,每调用一次就进入新的一层。 这个函数就是一个递归函数。 但是运行该函数将无休止地调用其自身,这显然是不正确的,会导致堆栈溢出。
一个函数在它的函数体内调用它自身称为递归调用, 这种函数称为递归函数,C++允许函数的递归调用。在递归调用中,递归函数反复调用其自身,每调用一次就进入新的一层。例如:
int f (int x)
{
int y = f(x);
//递归调用f()函数
return y;
}
这个函数就是一个递归函数。 但是运行该函数将无休止地调用其自身,这显然是不正确的,会导致堆栈溢出。如果在main( )函数中调用该函数:
void main()
{
int i = 4;
int j = f(i);
}
用Visual 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时,将使递归终止,并可逐层返回。

输出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。

相关评论

专题信息
    C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。最新正式标准C++于2014年8月18日公布。 其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大程序员受用的最强大编程语言之一,支持类:类、封装、重载等特性! 本教程从基础讲解了C++语言,希望对大家有所帮助,望多多支持中国站长网络学院。