Как насчет этого?
import java.util.*;
public class Main {
static void partition(int sum, int[] arr, int k) {
if (k == arr.length - 1) {
arr[k] = sum;
System.out.println(Arrays.toString(arr));
return;
}
for (int i = sum; i >= 0; i--) {
arr[k] = i;
partition(sum - i, arr, k + 1);
}
}
public static void main(String[] args) {
partition(10, new int[5], 0);
}
}
Вывод:
[10, 0, 0, 0, 0]
[9, 1, 0, 0, 0]
[9, 0, 1, 0, 0]
[9, 0, 0, 1, 0]
[9, 0, 0, 0, 1]
[8, 2, 0, 0, 0]
[8, 1, 1, 0, 0]
:
:
[0, 0, 0, 5, 5]
[0, 0, 0, 4, 6]
[0, 0, 0, 3, 7]
[0, 0, 0, 2, 8]
[0, 0, 0, 1, 9]
[0, 0, 0, 0, 10]
( см. Полный вывод )