全排列问题的递归算法java_java 实现的用递归法实现全排列问题

算法设计与分析 王晓东 感谢老师

Perm(list,k,m)

1.当k == m,即元素已经全排列,那么输出打印即可。

2当k+1 = m ,那么此时只有两个元素,输出两种排列情况:原数列,交换后的数列。

3.当k+2 = m,那么此时有三个元素。设顺序确定为x1、x2、x3.

1)  X1不变,对剩下的两个元素全排列,如2

2)  交换x1、x2,对剩下的两个元素全排列,如2

3)交换x1,x3,对剩下的两个元素全排列,如2

4.当k+3 = m,那么此时有四个元素。设顺序确定为x1、x2、x3、x4

1)  X1不变,对剩下的三个元素全排列,如3

2)  交换x1、x2,对剩下的三个元素全排列,如3

3)交换x1、x3,对剩下的三个元素全排列,如3

4) 交换x1、x4,对剩下的三个元素全排列,如3

以此类推,直到k==m。递归调用结束。

用图表示如下;

0818b9ca8b590ca3270a3433284dd417.png

package com.wjl;

public class Perm

{

static int count = 0;

public void perm(int[] list, int k, int m)

{

if(k == m)

{

for(int i= 0; i<= m; i++)

{

System.out.println(list[i]);

}

System.out.println("排列数:"+(++count));

}

else

for(int i = k; i<= m; i++)

{

System.out.println("before "+list[k]+" "+list[m]);

MyMath.swap(list, k, i);

System.out.println("after "+list[k]+" "+list[m]);

perm(list,k+1,m);

MyMath.swap(list, k,i);

}

}

public static void main(String[] args)

{

int[] list = new int[]{1,2,3,4};

Perm p = new Perm();

p.perm(list,0,3);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值