递归算法及其实例

递归算法的核心有两点:

1.递归的终止条件 递归函数的有无返回值和返回值类型决定了函数中递归终止条件的设定
2.分解后的子问题

实例1——汉诺塔问题

 1 #include<iostream>
 2 using namespace std;
 3 void Hanoi(int n,char A,char B,char C){
 4     if(n==1) cout<<"MOVE top disk from   "<<A<<"   to   "<<C<<endl;
 5     else{
 6         Hanoi(n-1,A,C,B);
 7         cout<<"MOVE top disk from   "<<A<<"   to   "<<C<<endl;
 8         Hanoi(n-1,B,A,C);
 9     }           
10 } 
11 int main(){
12     int n;//汉诺塔问题的规模
13     cout<<"请输入您的汉诺塔问题规模:"<<endl;
14     while(1){
15         cin>>n;
16         if(n<1) cout<<"请检查输入!"<<endl;
17         else break; 
18     }
19     char A,B,C;
20     cout<<"请输入三个圆柱的名字:"<<endl;
21     cin>>A>>B>>C; 
22     Hanoi(n,A,B,C);//调用解决函数 
23     return 0;
24 } 

实例2——递归求解数组的各项之和

 1 #include<iostream>
 2 using namespace std;
 3 int getSum(int n,int *A){//n是元素的个数 
 4     if(n==1) return A[0];
 5     else return getSum(n-1,A)+A[n-1];
 6 }
 7 int main(){
 8     int size;//问题的规模,即为所希望的数组元素的个数 
 9     cout<<"请输入问题的规模:"<<endl;
10     while(1){
11         cin>>size;
12         if(size<=0) cout<<"请检查规模的有效性"<<endl;
13         else break; 
14     } 
15     int *p=new int [size];//动态开辟数组
16     cout<<"请依次输入数组的元素:"<<endl;
17     for(int i=0;i<size;i++){
18         cin>>*(p+i);
19     }
20     cout<<"所给数组各个元素的和为:"<<endl<<getSum(size,p);
21     return 0;
22 }

实例3——递归求解数组的最大值

 1 #include<iostream>
 2 #include<math.h> 
 3 using namespace std;
 4 int getMax(int n,int *A){//n是元素的个数 
 5     if(n==1) return A[0];
 6     else return max(getMax(n-1,A),A[n-1]);
 7 }
 8 int main(){
 9     int size;//问题的规模即元素的个数 
10     cout<<"请输入问题的规模:"<<endl;
11     while(1){
12         cin>>size;
13         if(size<=0) cout<<"请检查规模的有效性"<<endl;
14         else break; 
15     } 
16     int *p=new int [size];//动态开辟数组 
17     cout<<"请依次输入数组的元素:"<<endl;
18     for(int i=0;i<size;i++){
19         cin>>*(p+i);
20     }
21     cout<<"您所输入的数组中最大值为:"<<endl<<getMax(size,p);
22     return 0;
23 }

猜你喜欢

转载自www.cnblogs.com/TYXmax/p/10988860.html
今日推荐