这可能是一个愚蠢的问题,但我不知道如何在if语句之后退出下面的函数。这段代码是用python编写的
def subset_sum(numbers, target, partial=[]):
s = sum(partial)
# check if the partial sum is equals to target
if s == target:
print("sum(%s)=%s" % (partial, target))
print("True")
return
if s > target:
return # if we reach the number why bother to continue
for i in range(len(numbers)):
n = numbers[i]
remaining = numbers[i + 1:]
subset_sum(remaining, target, partial + [n])
def main():
print(subset_sum([10, 7, 6, 3], 13))
main()
输出
sum([10, 3])=13
True
sum([7, 6])=13
True
None
我需要的是当sum([10,3)] == 13时,函数将打印
sum([10, 3])=13
True
然后结束。
答案 0 :(得分:2)
您正在打印该功能的返回值。您的函数返回None
(默认返回值),这就是打印的内容。
删除print()
函数调用,只需调用该函数并将其保留在:
def main():
subset_sum([10, 7, 6, 3], 13)
接下来,您的递归函数会继续搜索其他解决方案,因为您在找到解决方案时不会标记。
您可以在找到解决方案后返回True
,然后在递归调用为真时停止所有进一步搜索:
def subset_sum(numbers, target, partial=None):
partial = partial or []
s = sum(partial)
# check if the partial sum is equals to target
if s == target:
print("sum(%s)=%s" % (partial, target))
print("True")
return True
if s > target:
return False # if we reach the number why bother to continue
for i in range(len(numbers)):
n = numbers[i]
remaining = numbers[i + 1:]
if subset_sum(remaining, target, partial + [n]):
# solution found, stop searching
return True
return False
答案 1 :(得分:0)
您的函数只是返回,这意味着它返回None
。当你以递归方式调用函数时,这是一个问题,因为父节点不知道它是否应该继续递归。
您应该返回一个值,告诉父调用它是否应该返回或继续。