入门篇(2)——算法初步(4.3递归)
递归很难
重点:递归函数必须注意的两点:递归边界、递归式!
全排列问题
我的代码
//这段代码的着眼点是输出数组的下标
#include<stdio.h>
int pos[500]={};
int n,print[500],max=0;
void fun(int a){
if(a==n){
for(int i=0;i<n;i++){
printf("%d",print[i]);
if(i<n-1) printf(" ");
}
printf("\n");
}
else{
for(int i=0;i<=max;i++){
if(pos[i]==-1){
print[a]=i;
pos[i]=1;
fun(a+1);
pos[i]=-1;//要把pos数组复原
}
}
}
}
int main(){
int temp;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&temp);
pos[temp]=-1;
if(temp>max) max=temp;
}
fun(0);
}