import java.util.ArrayList;
//将一个正整数划分成若干正整数(不超过max)的和,输出每一种划分方法
public class IntDivision {
//递归对整数n进行划分,划分元素的最大值为max
public static ArrayList<ArrayList<Integer>> divideInt_r(int n, int max){
ArrayList<ArrayList<Integer>> divisionList = new ArrayList<ArrayList<Integer>>();
if(n <= 1){
ArrayList<Integer> list = new ArrayList<Integer>();
if(n==1) list.add(1);
divisionList.add(list);
return divisionList;
}
for(int i=max; i>0; i--){
ArrayList<ArrayList<Integer>> newDivList = divideInt_r(n-i, Math.min(n-i, i));//sublist中的元素既不能超过i,也不能超过n-i
for(ArrayList<Integer> sublist : newDivList){
sublist.add(0, i);
divisionList.add(sublist);
}
}
return divisionList;
}
public static void main(String[] args){
ArrayList<ArrayList<Integer>> divisionList = divideInt_r(6,4);
System.out.println("Total divisions: "+divisionList.size());
for(ArrayList<Integer> list : divisionList){
for(Integer num : list){
System.out.print(num+" ");
}
System.out.println();
}
}
}
Total divisions: 9
4 2
4 1 1
3 3
3 2 1
3 1 1 1
2 2 2
2 2 1 1
2 1 1 1 1
1 1 1 1 1 1