在調用一個函數的過程中又出現直接或間接地調用該函數本身,稱為函數的遞歸(recursive)調用。C++允許函數的遞歸調用,例如:
int f(int x)
{
int y, z;
z = f(y); //在調用函數f的過程中,又要調用f函數
return (2 * z);
}
下面舉兩個例子
1 【例4.10】有5個人坐在一起,問第5個人多少歲?他說比第4個人大兩歲。問第4個人歲數,他說比第3個人大兩歲。問第3個人,又說比第2個人大兩歲。問第2個人,說比第1個人大兩歲。最後問第1個人,他說是10歲。請問第5個人多大?
#include <iostream>
using namespace std;
int age(int);//函數聲明
int main( )//主函數
{
cout<<age(5)<<endl;
return 0;
}
int age(int n)//求年齡的遞歸函數
{
int c; //用c作為存放年齡的變量
if(n==1)
{
c=10; //當n=1時,年齡為10
}
else
{
c=age(n-1)+2; //當n>1時,此人年齡是他前一個人的年齡加2
}
return c; //将年齡值帶回主函數
}
#include <iostream>
using namespace std;
long fac(int);//函數聲明
int main( )
{
int n;//n為需要求階乘的整數
long y; //y為存放n!的變量
cout<<"please input an integer :"; //輸入的提示
cin>>n; //輸入n
y=fac(n);//調用fac函數以求n!
cout<<n<<"!="<<y<<endl; //輸出n!的值
return 0;
}
long fac(int n) //遞歸函數
{
long f;
if(n<0)
{
cout<<"n<0,data error!"<<endl; //如果輸入負數,報錯并以-1作為傳回值
f=-1;
}
else if(n==0||n==1)
{
return 1;//0!和1!的值為1
}
else
{
f=fac(n-1)*n;//n>1時,進行遞歸調用
}
return f;//将f的值作為函數值傳回
}