使用递归计算数组的排列

问题描述:

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

解决方案:

我们可以通过递归的方式生成数组元素的所有排列:例如生成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/archive/2012/12/20/2826891.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值