У вас есть пара проблем.
Одна из этих строк: int a = clonedSet.min(); //select next candidate
Если вы пройдете по вашему примеру, он найдет значение 1 и сначала его использует, поэтому1 и 4 были бы использованы, но 6 не были бы.
Вы лучше ищете максимальное значение, которое будет <= оставшаяся длина. </p>
Эта строка также странная для меня:
WASTAGE +=a;
Я думаю, вы должны вычитать, и почему вы изменяете статическое целое число?
Если это что-то, что может быть изменяемым, то вам следуетпросто передайте его, а затем вернитесь, когда вы закончите, сколько было потрачено, поэтому верните новый класс, решение и потерянную сумму.
Для рекурсии вам понадобится вашНапример, затем пройдитесь по одному за раз и посмотрите, соответствует ли его поведение ожидаемому.
Возможно, вы захотите посмотреть на этот цикл:
for (int i = 0; i < possibleOrders.numberInSet(); i++) // the repeat
Как, если вы делаете это рекурсивно, то, если у вас есть 3 возможных решения, выЯ полагаю, что в итоге я выполню 6 тестов, а не трижды, что вы ожидаете.
Если вы удалите цикл for, все равно все будет в порядке.Вставьте заявление для печати, чтобы вы могли наблюдать его каждый раз.
ОБНОВЛЕНИЕ:
Основываясь на дополнительной информации, вам нужно собрать всевозможные решения, то, что вы можете сделать, это пройти и сделать первый проход, получить решения, которые работают таким образом.Затем сдвиньте влево или вправо возможные решения, затем повторите попытку.
Когда вы полностью переместились, вы попробуете различные комбинации, но не все возможные комбинации, но затем вы сможете принять эти решения.и посмотрите, какой из них оптимален.
Если вы хотите протестировать больше комбинаций, то вам нужно будет циклически удалить элемент, и это может быть рекурсивным.
Итак, вы будетенужна одна рекурсивная функция внутри другой, поэтому вы рекурсивно просматриваете все возможные комбинации, а затем рекурсивно ищите решение проблемы.
Я думаю, что поиск max
, вероятно, будет лучшим, но этотолько мое внутреннее чувство, и можно показать, что min
лучше.