繁体   English   中英

python 3,递归,或在return语句中

[英]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 andor运算符中, 请勿返回布尔值。 他们返回评估的最后一件事。 所以,当你

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM