package cn.hngy;
//
整数分解:
public class Test5 {
public static void main(String[] args) {
int n = 10;
int a[] = new int[n];
fun(a,0,n,n);
}
private static void fun(int[] a, int i, int n, int n2) {
if(n2 == 0){
for (int j = 0; j < i; j++) {
System.out.print(a[j]);
}
System.out.println();
return;
}
int e = n<n2?n:n2;
for (int j = e; j > 0; j--) {
a[i++]=j;
fun(a,i,j,n2-j);
// a表示存储结果集的数组, i表示现在的数组中有多少元素, j表示当前分解的数是从哪一个数开头的 比如 第一个是10 第二是9......
// n2-j 表示想要分解的数分解了j后还剩多少、、、
i--;//回溯思想 当第一次时, e = n<n2?n:n2; 也就是说这时j=10--> n2-j==0 递归调用时,会输出这一条记录
}
}
}