簡體   English   中英

Python中斷/返回子集總和的遞歸函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM