python 3,递归,或返回语句

时间:2017-11-23 12:07:35

标签: python recursion

我有一个代码,用于检查给定的整数列表是否可以汇总到指定的目标。如果列表中的任何整数组合可以总结为目标值,则返回True。输入“start”是我想要开始的列表的索引,并一直持续到列表的结尾

def groupSum(start, nums, target):
    if start >= len(nums):
        return target == 0
    else:
        return groupSum(start + 1, nums, target - nums[start]) or groupSum(start + 1, nums, target);

所以,如果我把

groupSum(0, [2,4,8], 10)

它将返回True,如果我放

groupSum(0, [2,4,8], 9)

它将返回False

问题:我不明白他们如何在递归语句中将'或'放在return语句中。我看不出那是怎么回事。它是否同时通过多个功能来检查每个组合或什么?

我对Recursion方法很陌生,如果你能解释一下这里使用的技术,我会很感激。感谢

2 个答案:

答案 0 :(得分:2)

在python andor运算符中,返回布尔值。他们返回评估的最后一件事。所以,当你

return a or b

如果a是真值,则会返回a。否则,表达式的真实性取决于b,因此将返回b

答案 1 :(得分:0)

为什么它的True代表10是因为它与10(8 + 2)完全匹配;对于目标变量,递归函数减少为0。

所以,groupSum(start + 1, nums, target - nums[start])这变为True - 因此比较将为True或False,结果为True!

现在,对于9的值,没有这样的匹配,因此它始终保持False

您也可以尝试12和6。它将返回True。

然而,对于任何其他值,比较将始终为False或False。