如:combination(5,3)
要求輸出:543,542,541,532,531,521,432,431,421,321
遞歸,當k等於1的時候進行輸出,
當第一個數選的5,則從剩下的4321中選2個數,即combination(4,2)
第二個數選的4,則從剩下的321中選1個數,即combination(3,1),輸出543,542,541
第二個數選的3,則從剩下的21中選1個數,即combination(2,1),輸出532,531
第二個數選的2,則從剩下的1中選1個數,即combination(1,1),輸出521
當第一個數選的4,則從剩下的321中選2個數,即combination(3,2)
第二個數選的3,則從剩下的21中選1個數,即combination(2,1),輸出432,431
第二個數選的2,則從剩下的1中選1個數,即combination(1,1),輸出421
當第一個數選的3,則從剩下的21中選2個數,即combination(2,2)
第二個數選的2,則從剩下的1中選1個數,即combination(1,1),輸出321
import java.util.ArrayList;
public class combination {
static ArrayList<Integer> arrayList = new ArrayList<Integer>();
public static void main(String[] args) {
int n = 5;
int k = 3;
int [] arr = new int [n+1];
for(int i=0;i<=n;i++){
arr[i] = i;
}
Combination(n,k,arr);
}
private static void Combination(int n, int k,int arr[]) {
if(n<k||n<=0){
System.out.println("error");
}
if(k==1){
for(int i=n;i>0;i--){
arrayList.add(arr[i]);
System.out.println(arrayList);
arrayList.remove((Object)arr[i]);
}
}
if(k>1){
for(int i=n;i>=k;i--){
arrayList.add(arr[i]);
Combination(i-1,k-1,arr);
arrayList.remove((Object)arr[i]);
}
}
}
}