在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归(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的值作为函数值返回
}