if后退出功能

时间:2016-08-06 13:42:22

标签: python if-statement exit

这可能是一个愚蠢的问题,但我不知道如何在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

然后结束。

2 个答案:

答案 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。当你以递归方式调用函数时,这是一个问题,因为父节点不知道它是否应该继续递归。

您应该返回一个值,告诉父调用它是否应该返回或继续。