递归其实很难捉摸透,就是个无限调用自己的过程,在设计递归式时,不妨从最后一步开始想起
#include<cstdio>
const int maxn = 11;
int n,P[maxn],hashTable[maxn] = {false};
//P为当前排列,hashTable记录数字是不是在当前排列中
//当前处理排序中的第index位
void generateP(int index){
if(index == n+1){ //递归边界 ,到这里时,一条已经罗列完
for(int i=1;i<=n;i++)
{
printf("%d",P[i]);
}
printf("\n");
return; //返回到上一层genereteP()函数
}
for(int x=1;x<=n;x++)
{
if(hashTable[x] == false){
P[index] = x;
hashTable[x] = true;
generateP(index+1);
hashTable[x] = false;
}
}
}
int main(){
n = 3;
generateP(1);
return 0;
}