天天看点

C++递归

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