例如:4的結果有,(1+3),(2+2),(1+1+2),(1+1+1+1)
public class Demo {
// 存儲每次分割的值
static int[] arr;
// 需要分割的值
static int num = 4;
public static void main(String[] args) {
// 分割的值最多分成1+1+...+1 最多就是他本身的長度
arr = new int[num];
search(num,1,0);
}
/**
* 計算
* @param n 需要計算的數
* @param s 需要拆分的最小數
* @param x 分割存儲的下標
*/
private static void search(int n, int s, int x) {
// 當需要計算的數大於0的時候纔開始計算
if(n>0) {
for(int i=s;i<=n;i++) {
// 存儲本次分割出的值
arr[x]=i;
// 計算分割剩餘的值 同時存儲的下標+1
search(n-i,i,x+1);
}
return;
}
// 如果分割的值和分割出來的第一個值相同時 說明該值不可分割 不進行輸出
if(num != arr[0])
System.out.print(num+"="+arr[0]);
// 循環把分割出來的數組拼接
for(int i=1;i<x;i++) {
System.out.print("+"+arr[i]);
}
//換行
System.out.println();
}
}