Python 中的数字组合(硬币变化变化)

Number combinations in Python (coin change variation)

我正在尝试从提供的值列表中获取所有可能的唯一组合的列表,这些值的总和会产生一个也提供的目标值。我是初学者,看过一些关于硬币找零问题的内容,但是,这有些不同,因为我不是在尝试获取最少数量的元素。我尝试了很多方法,因为递归对我来说是非常新的和困难的,我想出了这段代码,在我增加递归限制后不再给我递归错误,但它每次只给出一个组合

from random import choice as pick
import sys

sys.setrecursionlimit(5000)


def find_combinations(elements, target, partial=None, results=None):
    if results is None:
        results = []
    if partial is None:
        partial = []

    if len(results) == 2:
        return results
        
    else:
        rand_num = pick(elements)
        if partial.count(rand_num) < elements.count(rand_num):
            partial.append(rand_num)
        total = sum(partial)
        if total == target:
            if partial not in results:
                results.append(partial)
                print(results)
            partial.clear()
            find_combinations(elements, target, partial, results)
        elif total > target:
            partial.clear()
            find_combinations(elements, target, partial, results)
        elif total < target:
            find_combinations(elements, target, partial, results)

如您所见,len 是任意的。我似乎无法突破 recursion.Any 解决方案将不胜感激:)

import itertools

stuff = [1, 2, 3]
Target = 3
for L in range(0, len(stuff)+1):
    for subset in itertools.combinations(stuff, L):
        if sum(subset) == Target:
            print(subset)

你可以使用 itertools 遍历每个组合,如果这个子集的总和等于目标,你可以在这里做任何你想做的事,我打印它,输出:

(3,)
(1, 2)