我有一个递归函数,它试图在给定整数列表的情况下形成一个特定的总和。该功能有效但它为我提供了所有可能的解决方案。一旦找到解决方案,我想打破递归函数。我怎样才能做到这一点?下面是函数的(伪)代码:
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是否可以由整数列表组成,我不需要所有的解决方案。
答案 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),它将停止进一步的递归调用,并立即让您退出。