У меня есть рекурсивная функция, которая выводит все вариации суммы числа

public static void genAll(int k, List<Integer> arr, Consumer<List<Integer>> rere) {
    if (k > 0) {
        for (int i = k - 1; i >= 0; i--) {
            List<Integer> arr1 = new ArrayList<>(arr);
            arr1.add(k - i);
            genAll(i, arr1, rere);
        }
    }
    if (k == 0 && arr.size() != 1) {
        Collections.sort(arr);
        System.out.println(arr);;
    }
}

В итоге выводятся массивы, сумма чисел которых равна K, и они повторяются.

Проблема заключается в том, что когда я изменил конструкции для более правильного решения, почему-то функция перестала работать исправно и начала выводить неправильные ответы

public static void genAll(int k, List<Integer> arr, Consumer<List<Integer>> rere) {
    if (k > 0) {
        for (int i = k - 1; i >= 0; i--) {
            List<Integer> arr1 = new ArrayList<>(arr);
            arr.add(k - i);
            genAll(i, arr, rere);
            arr.remove(arr.size() - 1);
            // List<Integer> arr1 = new ArrayList<>(arr);
            // arr1.add(k - i);
            // genAll(i, arr1 , rere);
        }
    }
    if (k == 0 && arr.size() != 1) {
        Collections.sort(arr);
        System.out.println(arr);;
    }
}

Ответы (0 шт):