Coderbyte:数组加法递归

时间:2015-10-22 19:39:27

标签: python

我需要帮助理解其他用户提交的此代码背后的逻辑

这是btw的问题:

  

让函数ArrayAdditionI(arr)获取存储的数字数组   在arr中并返回字符串 true ,如果有任何数字组合   数组可以加到等于数组中最大数的数字,   否则返回字符串 false 。例如:如果arr包含[4,6,   23,10,1,3]输出应返回 true ,因为4 + 6 + 10 + 3 =   23.数组不会为空,不包含所有相同的元素,并且可能包含负数。

def subsetsum(target, arr):
    if len(arr) == 0:
        return target == 0

    return subsetsum(target, arr[1:]) or subsetsum(target - arr[0], arr[1:])

def ArrayAdditionI(arr): 
    arr = sorted(arr)
    target = arr[-1]
    arr = arr[:-1]
    return 'true' if subsetsum(target, arr) else 'false'

我不知道subsetsum()是如何工作的。

1 个答案:

答案 0 :(得分:1)

这是一个递归函数,可以计算所有可能的总和。

例如,在我们的[4, 6, 23, 10, 1, 3]示例数组中,它首先将其排序为[1,3,4,6,10]并将目标设置为23.现在,如果我们按照堆栈,我们会看到

subsetsum(23,[1,3,4,6,10]) 

subsetsum发出两个不同的来电,即subsetsum(23,[2,3,4,6,10])subsetsum(22, [2,3,4,6,10])。这个想法模拟概念如果总和存在,那么它要么使用数组的第一个元素,要么不使用。第一个表达式模型总和不使用第一个元素数组和第二个模型总和使用数组的第一个元素

基本条件很简单,如果数组是空的,那么我没有进一步的计算,所以如果目标是0,那么我找到了数组中包含的总和。例如,如果我调用subsetsum(1,[1])它会调用subsetsum(0,[]) - 我希望您能看到为什么这将是一个解决方案和subsetsum(1,[]) - 这显然不是解决方案。

希望这会有所帮助:)