使用list和return语句在python中使用递归回溯的子集总和。

时间:2018-08-10 18:43:08

标签: recursion backtracking subset-sum

我正在尝试使用递归回溯解决子集总和问题。如果我立即打印结果可以使用,但是如果我尝试返回结果,它似乎无法使用。 这里是python中的代码。我添加了中间打印语句以使事情变得更容易(请取消注释):

l = [int(i) for i in input().split()]
num = int(input())
#print(num)
#print(l)
def subset(l):
    tot = 0
    ch = []
    return(subsetHelper(l,tot,num,ch))
def subsetHelper(l,tot,num,ch):
    #print("("+str(l)+" "+str(tot)+" "+str(num)+" "+str(ch)+")")
    if(tot==num):
        return(ch)
    elif(tot>num or len(l)==0):
        return
    else:
        ch.append(l[0])
        return subsetHelper(l[1:],tot+l[0],num,ch)
        del ch[-1]
        return subsetHelper(l[1:],tot,num,ch)
print(subset(l))

当我打印结果而不返回结果时,相同的概念也起作用。

l = [int(i) for i in input().split()]
num = int(input())
#print(num)
#print(l)
def subset(l):
    tot = 0
    ch = []
    subsetHelper(l,tot,num,ch)
def subsetHelper(l,tot,num,ch):
    #print("("+str(l)+" "+str(tot)+" "+str(num)+" "+str(ch)+")")
    if(tot==num):
        print(ch)
    elif(tot>num or len(l)==0):
        #return "Hello"
        return
    else:
        ch.append(l[0])
        subsetHelper(l[1:],tot+l[0],num,ch)
        del ch[-1]
        subsetHelper(l[1:],tot,num,ch)
subset(l)

有什么建议吗?

0 个答案:

没有答案