使用递归计算数组的排列
问题描述:
给定一个整型数组(数组元素各不相同),输出数组元素的所有可能排列。
解决方案:
我们可以通过递归的方式生成数组元素的所有排列:例如生成A[4]的排列,我们把A[3]分别指定为A[0],A[1],A[2],A[3],例如制定为A[0]就需要将A[0]和A[3]互换,在每次指定时计算前3个元素的排列,这样问题就减小规模了,当只剩下一个元素时再进行输出,值得注意的一点是:在递归过程中改变了数组的内容,递归结束后必须改回来!
实现代码:
//surplus还有多少整数未被递归,n数组总数,A为待排列数组
void arrange(int A[],int surplus,int n){
int i;
//只剩下一个元素时直接输出即可
if(surplus == 1){
for(i=0;i<n;i++)
cout<<A[i];
cout<<endl;
}
//递归从后向前执行,需要两个标记位置的参数
for(i=0;i<surplus;i++){
swap(A[i],A[surplus-1]);
arrange(A,surplus-1,n);
//交换之前打印数据
swap(A[i],A[surplus-1]);
}
}