递归的思想:
1.不停地调用一个函数,直到达到我们想要的目的。
2.递归必须要有边界,不然就会陷入死循环。
例题1:递归上楼梯
#include<iostream>
using namespace std;
//设共有n级楼梯,某人每步可走1级也可以走2级。
//问:求从底层开始走完全部楼梯得有多少种走法?
int a[1001];
int index=0;
void output(){//输出迈过的台阶步数
for(int i=0;i<index;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
void step(int n){
if(n==0){
output();
return ;
}
a[index++]=1;
step(n-1);
index--;
if(n>1){
a[index++]=2;
step(n-2);
index--;
}
if(n>2){
a[index++]=3;
step(n-3);
index--;
}
}
int main(){
int n;
cin>>n;
step(n);
return 0;
}
例题2:全排列问题
#include<iostream>
using namespace std;
int a[10],book[10],n;
void search(int s){//s定位下标
if(s==n+1){
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return ;
}
for(int i=1;i<=n;i++){
if(book[i]==0){//标记前方是否有数字存储
a[s]=i;
book[i]=1;
search(s+1);//从1开始一直到n找全排列
book[i]=0;
}
}
}
int main(){
//递归的全排列问题
cin>>n;
search(1);
return 0;
}