def subset_sum(values, target): if type(target) is not int or target < 0 or any(type(value) is not int or value < 0 for value in values): raise ValueError("Nonnegative integer inputs required") def choose(index, remaining): if remaining == 0: return [] if index == len(values) or remaining < 0: return None included = choose(index + 1, remaining - values[index]) if included is not None: return [index] + included return choose(index + 1, remaining) return choose(0, target) values = [7, 4, 6] chosen = subset_sum(values, 11) print(chosen) print(sum(values[index] for index in chosen)) print(subset_sum([4, 6], 3))