Recursion 仅使用递归返回python中包含数字组合的列表

Recursion 仅使用递归返回python中包含数字组合的列表,recursion,append,combinations,Recursion,Append,Combinations,这个程序从列表中打印出不同的元素组合。我们的想法是要么选择元素,要么不选择。“打印(存储)”打印出正确的答案,但是,如果我试图列出这些答案,似乎有什么地方出了问题 从调试中我了解到,当当前函数调用中执行“store.append(lst[I])”时,“ans”在上一次调用中被更新。我不知道如何返回所有组合的列表 ans = [] def comb(lst,i,store): if i ==len(lst): print(store) global ans

这个程序从列表中打印出不同的元素组合。我们的想法是要么选择元素,要么不选择。“打印(存储)”打印出正确的答案,但是,如果我试图列出这些答案,似乎有什么地方出了问题

从调试中我了解到,当当前函数调用中执行“store.append(lst[I])”时,“ans”在上一次调用中被更新。我不知道如何返回所有组合的列表

ans = []

def comb(lst,i,store):
    if i ==len(lst):
       print(store)
       global ans
       ans.append(store)
    else:
       comb(lst,i+1,store) # dont select element
       store.append(lst[i])
       comb(lst,i+1,store) # select the element
       store.pop()

def driver(lst):
    comb(lst,0,[])
    return ans

print(driver([1,2,3]))



#OUTPUT:
[]
[3]
[2]
[2, 3]
[1]
[1, 3]
[1, 2]
[1, 2, 3]
# return ans output:
[[], [], [], [], [], [], [], []]

下面是我要做的:

def comb(lst,i=0,store=[]):
如果i==len(lst):
退货[商店]
x=梳(第一层,i+1,存储)
y=梳(lst,i+1,存储+lst[i]])
返回x+y
我不喜欢附加到全局
ans
或弹出
存储
。另外,尽可能不要使用突变