Я учу себя рекурсивному возвращению.Для задачи суммирования кубиков я не могу понять, как элегантно собрать результаты.
Для справки вот мой код, который просто печатает любой бросок кубика, который соответствует критериям.В идеале я хочу изменить его, чтобы вместо вывода результата я мог составить список выбранных кубиков и вернуть его.
Ниже приведен код, который не выполняет то, что я хочу
def dice_sum(num_dice: int, target_sum: int) -> None:
dice_sum_helper(num_dice, target_sum, [])
def dice_sum_helper(num_dice: int, target_sum: int, chosen: List[int]) -> None:
if num_dice == 0 and sum(chosen) == target_sum:
print(chosen)
elif num_dice == 0:
pass
else:
for i in range(1, 7):
chosen.append(i)
dice_sum_helper(num_dice - 1, target_sum, chosen)
chosen.pop()
Вместо этого я хочу сделать что-то вроде этого
from typing import List
DiceResult = List[List[int]]
def dice_sum(num_dice: int, target_sum: int) -> DiceResult:
return dice_sum_helper(num_dice, target_sum, [])
def dice_sum_helper(num_dice: int, target_sum: int, chosen: List[int]) -> DiceResult:
if num_dice == 0 and sum(chosen) == target_sum:
# Return the value that meets the constraints
return chosen
elif num_dice == 0:
pass
else:
for i in range(1, 7):
chosen.append(i)
# Return the result of my recursive call and build the list of lists?
result = dice_sum_helper(num_dice - 1, target_sum, chosen)
return result.append(result)
# End of that logic
chosen.pop()
Я ищу больше теорию или шаблон, чтобы использовать, чем точный код.Я не могу получить код для сбора и добавления каждого результата без использования внешнего списка.