遞歸由兩部分組成酬核,一部分是函數(shù)的描述鲸郊,另一部分是函數(shù)終結(jié)的端口赦肃。(先看溅蛉,后面會(huì)一下子感悟)
一個(gè)小栗子:計(jì)算1-100的相加之和。
分析下:我們來找函數(shù)描述:1+2+3+4······+n
我們?cè)賮碚医Y(jié)束口 n=1;
#include <iostream>
using namespace std;
int JC(int n);
int main(){
cout<<JC(100);
return 0;
}
int JC(int n){
int sum=0;
if(n==1){
return 1;//遞歸的出口
}
else
return JC(n-1)+n;//公式抽象::f(n)=f(n-1)+n
}
求數(shù)組的前n項(xiàng)和他宛。?把一個(gè)數(shù)組看成兩部分船侧,比較兩部分大小。然后尋找遞歸出口厅各。最后肯定就是一位數(shù)
#include <iostream>
using namespace std;
int sum(int*a,int n);
int main(){
? ? int a[]={1,2,3,8,7,6,2};
cout<<sum(a,6);
return 0;
}
int sum(int*a,int n){
if(n==0){
return a[0];//遞歸的出口镜撩,如果本身就一個(gè)則其本身就是最大值。
}
else
return sum(a,n-1)+a[n];
}
遞歸實(shí)現(xiàn)選出數(shù)組最大值队塘。
#include <iostream>
using namespace std;
int max(int*a,int n);
int main(){
? ? int a[]={1,2,3,8,7,6,2};
cout<<max(a,6);
return 0;
}
int max(int*a,int n){
if(n==0){
return a[0];//遞歸的出口
}
else if(max(a,n-1)>a[n])
? return max(a,n-1);
else
? ? return a[n];
}
最后點(diǎn)下筆袁梗,理解遞歸,首先需要理解函數(shù)的嵌套調(diào)用憔古,也就是理解一個(gè)函數(shù)調(diào)用另外一個(gè)函數(shù)的時(shí)候遮怜,系統(tǒng)做了什么。確切的說投放,運(yùn)行棧的機(jī)制奈泪。
向一個(gè)玻璃杯里放乒乓球,放入1號(hào)再放入2號(hào)再放入3號(hào),然后取出的順序則為3,2,1涝桅,這種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu)即為棧拜姿。那遞歸與棧又又什么關(guān)系呢?其實(shí)遞歸函數(shù)就是在調(diào)用棧冯遂!