У меня давно запущенная программа, и я хочу, чтобы она реагировала.Алгоритм является рекурсивным, поэтому иногда даже подзадачи при более длительных вызовах могут быть длиннее, чем при более коротких циклах.Я попытался сделать это, чтобы использовать yield, но в итоге получил список, полный генераторов на различных уровнях рекурсивной структуры списка (список также многоуровневая иерархия, глубина записи вызовов).Я наконец-то сделал простую распечатку версии ответов, но в конце она распечатывает ответы.Я не должен печатать только результаты рекурсивных вызовов, также результаты должны подвергаться последующей обработке перед печатью.
Существует ли простой шаблон для вызова функции верхнего уровня для получения значений, но рекурсивные вызовы для возврата ответов?Должен ли я использовать for для зацикливания результатов рекурсивных вызовов или сделать list () ответов из рекурсивных вызовов?Должен ли я просто поместить параметр глубины и вернуться с глубиной> 0 и получить на глубине 0?
В любом случае, есть ли простой способ повернуть один ответ на вызов вывода строки, чтобы вернуть строки в основную программу Python?Или я все еще должен вернуть полный список из вызова модуля?Я мог бы легко запустить версию вызова ОС в отдельном интерпретаторе с помощью 'bg' в системе Linux, не так ли?
Проблема в том, что проблема полностью закрыта, примером, полезным для моего приложения, будет, например, сделать то же самое, что иэто без комбинаций, только добавление чисел, пока они не превысят лимит, рекурсивно возвращая точные суммы:
from __future__ import print_function
def subset(seq, mask):
""" binary mask of len(seq) bits, return generator for the sequence """
return (c for ind,c in enumerate(seq) if mask & (1<<ind))
numbers = [1, 5, 3, 9, 4]
print('Numbers: ',numbers)
print('Possible sums',min(numbers),'..',sum(numbers))
for i in range(1,2**len(numbers)):
sub = list(subset(numbers, i))
print(sum(sub),'=',' + '.join(str(s) for s in sub))
print()
target = 11
print ('Finding subsequence for sum = %i' % target)
check = None
for check in (subset(numbers, mask)
for mask in range(1,2**len(numbers))
if sum(subset(numbers, mask))==target):
print (' + '.join(str(s) for s in check), ' = ', target)
if not check:
print('No solutions')