Skip to main content
 首页 » 编程设计

python之尝试使用递归方法生成字符串的子集

2025年05月04日39artech

尝试在 python 中使用递归实现算法。看起来缺少一些我无法调试的东西。

我的方法是有两个递归分支,并在每次递归时传递一个元素。详情如下:

## input pattern : "ab" 
## output pattern : ["", "a", "b", "ab"] 

此模式的递归树如下所示

#           "ab" [ROOT] 
#                   | 
#           -a           +a 
#           |             | 
#       -b      +b    -b    +b 
# =>    ""      "b"     "a"     "ab" 

我现有的代码如下:它没有按预期工作。

def gen_subset(slist): 
    def helper(slist,i,temp,out): 
        if len(slist) == i: 
            out.append(temp) 
            return() 
        else: 
            helper(slist,i+1,temp,out) 
            temp.append(slist[i]) 
            helper(slist,i+1,temp,out) 
 
    out = [] 
    helper(slist,0,[],out) 
    return out 
 
s = "ab" 
print (gen_subset([c for c in s])) 

这段代码产生了错误的结果。

输出

[['b', 'a', 'b'], ['b', 'a', 'b'], ['b', 'a', 'b'], ['b', 'a', 'b']] 

我在这里遗漏了什么吗?

请您参考如下方法:

将 temp.append(slist[i]) 更改为 temp = temp + [slist[i]]。

这是因为 temp.append() 就地修改了 temp 变量。
相反,我们需要将 temp 的副本传递给下一个递归调用。