一旦找到解决方案,Python就会停止递归

时间:2015-04-25 10:12:56

标签: python recursion sum

我有一个递归函数,它试图在给定整数列表的情况下形成一个特定的总和。该功能有效但它为我提供了所有可能的解决方案。一旦找到解决方案,我想打破递归函数。我怎样才能做到这一点?下面是函数的(伪)代码:

function find_sum(list_of_integers, target_sum, partial_solution):
    if partial_solutions == target_sum:
        return True
    if partial_solution > target_sum:
        return

    for i in range(len(list_of_integers)):
        n = list_of_integers[i]
        remaining = list_of_integers[i+1:]
        find_sum(remaining, target_sum, partial_solution + n)

所以我只想知道target_sum是否可以由整数列表组成,我不需要所有的解决方案。

3 个答案:

答案 0 :(得分:1)

您可以使用该类。当您找到解决方案更改self.flag = True时,在 init 方法中初始化变量self.flag = False。

class Solution:
    def __init__(self):
        self.flag = False

    def find_sum(....):
        for i in range(len(list_of_integers)):
             if self.flag: return True
             n = list_of_integers[i]
             remaining = list_of_integers[i+1:]
             self.flag = find_sum(remaining, target_sum, partial_solution + n)

    

答案 1 :(得分:0)

您需要检查递归调用的返回值;如果返回True,则立即传播,而不是继续循环:

for i in range(len(list_of_integers)):
    n = list_of_integers[i]
    remaining = list_of_integers[i+1:]
    found = find_sum(remaining, target_sum, partial_solution + n)
    if found:
        return True

答案 2 :(得分:0)

当您找到解决方案后,只需返回它,并在下一行中直接使用sys.exit(0),它将停止进一步的递归调用,并立即让您退出。