Recursion 在python中使用list和return语句使用递归回溯进行子集求和。

Recursion 在python中使用list和return语句使用递归回溯进行子集求和。,recursion,backtracking,subset-sum,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 = [] subsetHelper(l

我试图用递归回溯法解决子集和问题。如果我立即打印结果,它会起作用,但如果我试图返回结果,它似乎不起作用。 下面是python中的代码。我添加了中间打印语句以简化操作(请取消注释):

当我打印结果而不返回结果时,同样的概念也适用

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)

有什么建议吗?

输入和预期输出是什么样的?你能具体描述一下“子集和”吗?是吗?输入是一个列表,比如说“l”,数字,比如说“num”,输出是给定输入的子集,比如说“l1”,这样l1的数字加起来就是num,例如-输入-[1,3,7,2,4],6输出-[1,3,2]解释-1+3+2=6,尽管可能有多个解决方案([2,4]也是一个有效的解决方案),我希望函数返回单个解决方案,而不是打印所有可能的解决方案。
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)