![C++从零开始学(视频教学版)(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/128/29977128/b_29977128.jpg)
上QQ阅读APP看书,第一时间看更新
6.3 特殊函数调用方式——递归调用
在任何一个函数体内不能出现其他函数的定义。但是,在任何一个函数体内可以调用任何函数,包括该函数本身。
在一个函数中,如果出现直接或者间接地调用函数本身,就称为递归调用,相应的函数称为递归函数。
提示
在进行递归调用时,被调用函数的数据环境和调用函数的数据环境在结构上是一致的,只是被调用函数和调用函数传递的参数不同而已。
编写一个递归函数,首先找到递归公式,然后设置初始条件和出口。
(1)找递归公式(往往是找f(n)和f(n-1)之间的关系)。
(2)递归结束条件。
例如,n!=n*(n-1)!(递归公式)。
1!=1(终止条件)。
明确以上两个条件,就很容易写出代码。
下面通过一个实例来说明如何进行递归调用。
现有一个数列,已知an=2*a(n-1)+3,并且a1=1,求解a1~a8的各项值。把数列问题转化为函数问题,认为an=f(n),a(n-1)=f(n-1)……于是f(n)=2*f(n-1)+3,f(n-1)=2*f(n-1-1)+3……直到f(1)=1。
【实例6-8】递归(代码6-8.txt)
新建名为“dgtest”的【C++ Source File】源程序,源代码如下所示:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P118_15332.jpg?sign=1738870355-dRNO4D6XKVyTIQDSTJp0xo36lofOb04F-0-d81527d4672d0c774a729ec2552eee19)
【代码详解】
在该例中,首先声明了一个函数f。在主函数中,使用for循环,循环调用f(i),将每个f都输出。定义函数f,如果参数n的值为1,就返回1,这个是递归调用的出口;如果参数值大于1,就调用递归函数2*f(n-1)+3。
运行结果如图6-9所示。
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P119_15362.jpg?sign=1738870355-Y0WtObsWu7NlJfMR58FujpqpzIcJhamu-0-46a6428b52957baa9a29af4ad321f6c2)
图6-9 代码运行结果
【实例分析】
从结果来看,将f(1)~f(8)的值全部都计算输出。