1. 程式人生 > >C++遞迴

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; //將年齡值帶回主函式
}

2 求n!可以用遞推方法,即從1開始,乘2,再乘3……一直乘到n。求n!也可以用遞迴方法,即5!=4!×5,而4!=3!×4,…,1!=1。可用下面的遞迴公式表示:
    n! = 1    (n=0, 1)
    n * (n-1)!     (n>1)

#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的值作為函式值返回
}

文章及demo來源:c語言中文網

http://c.biancheng.net/cpp/biancheng/view/139.html