#include<iostream> using namespace std; void perm(int list[],int k,int m);//声明 void perm(int list[],int k,int m)//调用 { if(k==m)//相等则输出,总是输出最后一层。 { for(int j=0;j<=m;j++) { cout<<list[j]; } cout<<endl; } else { for(int i=k;i<=m;i++) { swap(list[k],list[i]);//第一层,先和自己换。1和1换,2和2换,3就相等然后输出了。输出后回来,2和3换。 perm(list,k+1,m); swap(list[k],list[i]);//将前面换回的顺序再换回来,防止变顺序。 } } } int main() { //char a[7]="123456"; int a[3]={0,1,2}; perm(a,0,2); system("pause"); return 0; }
逻辑顺序:
第一层循环3次:
k=0,i=k=0,list[0]和list[0]交换。然后递归调用k+1=1,2
进入第二层,循环2次:
k=1,i=k=1,list[1]和list[1]交换,然后递归调用k+1=2,2
此时相等,输出结果,0,1,2(相当于没有循环或者循环1次)
然后回到第二层,循环第二层的第2次
k=1,i=k+1=2,list[1]和list[2]交换,然后递归调用k+1=2,2
此时相等,输出0,2,1
然后回到第一层,循环第一层的第2次,后面同次过程。
时间: 2024-10-11 22:23:39