學如逆水行舟,不進則退;心似平原走馬,易放難收
阿新 • • 發佈:2018-12-22
在呼叫一個函式的過程中又出現直接或間接地呼叫該函式本身,稱為函式的遞迴(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語言中文網