Почему моя рекурсивная функция Python для создания ограниченных подмножеств не может исключить недопустимые комбинации?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему моя рекурсивная функция Python для создания ограниченных подмножеств не может исключить недопустимые комбинации?

Сообщение Anonymous »

Я пытаюсь написать функцию Python, которая генерирует все комбинации списка чисел, но с определенными ограничениями. Вот чего я хочу добиться:
  • Создать все возможные подмножества списка.
  • Убедиться в сумме каждого подмножества. не превышает заданное целевое значение (max_sum).
    Например, если я ввожу числа = [2, 3, 5] и max_sum = 6, я хочу, чтобы выходные данные были:
    [[ ], [2], [3], [5], [2, 3]]
    Вот что я пробовал:

Код: Выделить всё

def generate_combinations(nums, max_sum, current=[], index=0):
if sum(current) > max_sum:
return []
if index == len(nums):
return [current]
include = generate_combinations(nums, max_sum, current + [nums[index]], index + 1)
exclude = generate_combinations(nums, max_sum, current, index + 1)
return include + exclude

numbers = [2, 3, 5]
max_sum = 6
result = generate_combinations(numbers, max_sum)
print(result)
Однако это возвращает такие результаты:

Код: Выделить всё

[[2], [2, 3], [2, 3, 5], [3], [3, 5], [5]]
Проблемы:
  • Некоторые подмножества превышают max_sum (например, [2, 3, 5]).
    Проблемы:

    Некоторые подмножества превышают max_sum (например, [2, 3, 5]).
    li>
    Я хочу, чтобы пустое подмножество [] было включено, но оно отсутствует.
Что я пробовал:< /p>
Добавление условия для явного включения [] в начале рекурсии, но это не сработало должным образом.
Печать операторов отладки для проверки промежуточных значений, но я не уверен, где логика фильтрации нарушается.
Что не так с моей рекурсивной логикой фильтрации подмножеств на основе max_sum?
Есть ли лучший способ структурировать рекурсию для удовлетворения требований ?
Есть ли какие-либо крайние случаи, которые мне следует учитывать при создании ограниченных комбинаций?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ts-fail-to
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»