我有一个代码,用于检查给定的整数列表是否可以汇总到指定的目标。如果列表中的任何整数组合可以总结为目标值,则返回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方法很陌生,如果你能解释一下这里使用的技术,我会很感激。感谢
答案 0 :(得分:2)
在python and
和or
运算符中,不返回布尔值。他们返回评估的最后一件事。所以,当你
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。