计算给定列表的子集的总和是否递归存在

时间:2015-11-13 11:21:05

标签: python-2.7 recursion

我需要构建一个递归函数,它接收一个整数列表(数字)和一个非负整数(目标)。

该函数将查找给定列表的任何可能子集,如果其值加起来并等于目标,则返回True

def subset_sum(numbers, target):
    '''
    numbers - a list of positive integers
    target - a non-negative integer
    returns True if the list 'numbers' has a sub-list with sum 'target',
            False otherwise.
    '''

Side Note: [] is a subset of any given list (set)

示例:

subset_sum([1,2,3,4], 8):

True

subset_sum([1,2,3,4], 11):

False

subset_sum([4,4,4], 05):

True

subset_sum([4,4,4], 11):

False

subset_sum([], 0):

True

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

这是关于子集求和问题的变体(子问题),您可以在这里阅读:

https://en.wikipedia.org/wiki/Subset_sum_problem

有一种伪代码算法概述了大约在多项式时间内解决任何整数(正或负)的问题。有趣的是,这是发布在Stackoverflow和python中!

Fast solution to Subset sum