[英]python 3, Recursion, Or in return statement
我有一个代码可以检查给定的整数列表是否可以总计到指定的目标。 如果列表中整数的任意组合可以求和为目标值,则返回True。 输入“开始”是我要从中开始并继续直到列表结尾的列表的索引
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
问题:在递归的情况下,我不理解它们如何在返回语句中添加“或”。 我看不到它是如何工作的。 它是同时传递多个功能来检查每个组合还是什么?
我对递归方法还很陌生,如果您能解释这里使用的技术,将不胜感激。 谢谢
在python and
和or
运算符中, 请勿返回布尔值。 他们返回评估的最后一件事。 所以,当你
return a or b
如果a
是truthy值, a
将被退回。 否则,表达式的真实性取决于b
,因此将返回b
。
为什么10为True
,是因为10(8 + 2)完全匹配。 您的递归函数将其减少为目标变量的0。
所以, groupSum(start + 1, nums, target - nums[start])
这将成为True
-这样的比较将是真是假,这将变成真!
现在,对于9的值,没有这样的匹配项,因此它将始终保持False
。
您也可以尝试12和6。 它将返回True。
而对于任何其他值,比较将始终为False或False。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.