[英]Python break/return a recursive function for sum of subsets
我正在嘗試實現此功能,以查找任何子集的總和是否等於目標值:
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)
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 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)
return // should stop once reaches one instance
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])
使subset_sum
返回布爾值:是否找到該子集。 檢查遞歸調用的結果。
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)
return True # should stop once reaches one instance
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]):
return True
return False
更好的方法可能是返回答案(即partial
答案)或None
。
編輯:錯過了原始算法,這應該返回第一個有效列表。
嘗試這個:
def subset_sum(numbers, target, partial=[]):
s = sum(partial) # check if the partial sum is equals to target
if s >= target: # if we reach the number why bother to continue
return partial
for i in range(len(numbers)):
n = numbers[i]
remaining = numbers[i+1:]
results = subset_sum(remaining, target, partial + [n])
if results:
return results
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.