数组全排列(元素不重复) java递归实现

全排列作为一个经典的递归问题,就是把一个大问题分解为若干个相互独立的子问题,这些子问题相互独立且与原问题相同。
递归的解这些子问题,然后将这些子问题的解合并得到原问题的解。举个例子,1234的全排列 就等于1(234)的全排列+2(134)的全排列+3(214)+4(231)全排列,同理依次类推。
其中java出现的问题就是swap函数不能像c++那样很简单的用指针或者&引用来交换,这里我使用了数组来进行交换。
话不多说,上代码:

public class perm { static void swap(char c[],int index1,int index2)//用数组来实现数值的交换 { char temp=c[index1]; c[index1]=c[index2]; c[index2]=temp; } static void Perm(char c[],int k,int n) { if(k==n) { for(int i=0; i<=n; i++) { System.out.print(c[i]+" "); } System.out.println(); } else{ for(int i=k; i<=n; i++)//后面的数依次和k位置的值交换 { swap(c,k,i); Perm(c,k+1,n); //递归 swap(c,k,i); //下一次排列之前,先使数组恢复成原样。 } } } public static void main(String[] args) { char c[]={'a','b','c','d'}; Perm(c,0,3); } }

结果如下:
【数组全排列(元素不重复) java递归实现】a b c d
a b d c
a c b d
a c d b
a d c b
a d b c
b a c d
b a d c
b c a d
b c d a
b d c a
b d a c
c b a d
c b d a
c a b d
c a d b
c d a b
c d b a
d b c a
d b a c
d c b a
d c a b
d a c b
d a b c

    推荐阅读