使用递归计算数组的排列

问题描述:

给定一个整型数组(数组元素各不相同),输出数组元素的所有可能排列。

解决方案:

我们可以通过递归的方式生成数组元素的所有排列:例如生成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]); 
    }

}

原文地址:https://www.cnblogs.com/guojidong/p/2826891.html