python 3、递归或in return语句

python 3、递归或in return语句,python,recursion,Python,Recursion,我有一个代码,它检查给定的整数列表是否可以求和到指定的目标。若列表中的任何整数组合的总和可以达到目标值,则返回True。输入“start”是列表的索引,我希望从该索引开始并一直持续到列表的末尾 def groupSum(start, nums, target): if start >= len(nums): return target == 0 else: return groupSum(start + 1, nums, target - n

我有一个代码,它检查给定的整数列表是否可以求和到指定的目标。若列表中的任何整数组合的总和可以达到目标值,则返回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)
它会变成真的,如果我

groupSum(0, [2,4,8], 9)
它将返回False

问:我不明白在递归的情况下,他们如何在返回语句中加上“or”。我看不出这是怎么回事。是同时传递多个函数来检查每个组合还是什么


我对递归方法非常陌生,如果您能解释一下这里使用的技术,我将不胜感激。感谢

在python
运算符中,不返回布尔值。它们返回最后评估的内容。那么,当你

return a or b

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

为什么10的
为真是因为10(8+2)有一个精确匹配;对于目标变量,递归函数将其减少为0

因此,
groupSum(start+1,nums,target-nums[start])
变为
True
——因此比较结果将是真或假,这将变成真

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

你也可以试试12号和6号。它会变成真的


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

我仍然不明白它在我的情况下是如何工作的。如何知道返回输入的递归函数?我不知道这是如何工作的,特别是在递归情况下,您不知道将返回哪一个。第一个将被称为。如果其返回值为truthy,则将返回此值。否则,将返回第二项的输出,无论该输出是什么