递归版本
private void parse(int n, int s) {
if (n < 1 || s >= Integer.MAX_VALUE)
return;
System.out.print(s + " = " + n);
int c = n;
while (c != s){
System.out.print(" + 1");
c++;
}
System.out.println();
parse(n - 1 , s);
c = n;
int t = c;
while (c != s){
if (c + t == s && c != s - 1){
System.out.println(s + " = " + n + " + " + c);
}
c++;
}
}
非递归版本
private void parse1(int n){
if (n <= 1 || n >= Integer.MAX_VALUE)
throw new IllegalArgumentException("参数非法!");
int c = n - 1;
while (c > 0){
int i = c;
System.out.print(n + " = " + c + " + ");
while (i < n){
if (i < n -1)
System.out.print("1 + ");
else
System.out.print("1");
i++;
}
System.out.println();
c--;
}
c = 2;
while (c <= n / 2){
System.out.print(n + " = " + c + " + ");
int sum = 0;
for (int i = c; i < n; i++) {
sum += 1;
}
System.out.println(sum);
c++;
}
}