В python 3 Я пытаюсь написать функцию, которая принимает два натуральных числа ? и ? в качестве входных данных и возвращает набор всех кортежей размером ?, сумма которых равна ?.
Я построил следующие функции:
def get_tuples(length, total):
if length == 1:
yield (total,)
return
for i in range(total + 1):
for t in get_tuples(length - 1, total - i):
yield (i,) + t
, который, например, list (get_tuples (2, 8)) возвращает правильные результаты, и:
def get_tuples(length, total):
if length == 1:
return [(total,)]
comp = []
for i in range(total + 1):
for t in get_tuples(length - 1, total - i):
comp.append((i,) + t)
return comp
, который, однако, возвращает неправильный результат (т.е. один кортеж). Кто-нибудь может объяснить, почему и как исправить вторую функцию?