//k表示数组中最开始的元素的编号,m表示数组中最后一个元素的编号
void perm (int list[],int k,int m)
{
int i;
int temp;
if (k==m)
{//只剩一个元素
for(i=0;i<=m;i++)
printf("%d",list[i]);
printf("\n");
}
else
{//还有多个元素,递归产生排列
for(i=k;i<=m;i++)
{
//交换k,i的元素
temp=list[k];
list[k]=list[i];
list[i]=temp;
perm(list,k+1,m);
//交换k,i的元素
temp=list[k];
list[k]=list[i];
list[i]=temp;
}
}
}
int main ()
{
int list[5]={1,2,3};
int k;
int m;
k=0;m=2;
perm(list,k,m);
return 0;
}