while(list[k]=list[i]) 这一步list[k]被list[i]赋值,还有应该改成while(list[k]==list[i]&&ifor(i=k;i { if(list[k]!=list[i]) //无重复则交换 { Swap(list[k],list[i]); } else //重复则一直使i自加,直至不重复,且本次循环不交换 { while(list[k]==list[i]&&i i++; } Perm(k+1,m); //递归,排剩下的数 Swap(list[k],list[i-1]); }