有解决递归问题的好方法吗?

时间:2019-11-18 14:45:09

标签: python algorithm list

我正在尝试解决这个问题

  

实现功能 substring ,该函数接受 string 并返回其所有可能的子字符串。   如果(1)?为空字符串,或者(2)?中的所有字符,则字符串?是字符串?的子字符串。   以?及其相对的左右顺序出现。我们假设原始字符串?   不含任何重复的字符。

例如,

>>>substring('a')
['', 'a']
>>> substring('abc')
['', 'c', 'b', 'bc', 'a', 'ac', 'ab', 'abc']

您必须使用以下代码

def substring(S):
    if S ==[]:
    else:

我最近才了解递归,并尝试使用此代码。

def substring(S):
    if S ==[]:
        return ['']
    else:
        return[substring(S[1:])]+[substring(S[0])]

我该如何解决这个问题,我有什么建议可以解决这些类型的问题?

更新:阅读评论和答案后,我可以得到的答案如下。但是,此代码的基本情况是S == '',而不是问题中必需的S == []

def substring(S):
    if S =='':
        return ['']
    else:
        return substring(S[1:])+[S[0] + i for i in substring(S[1:])]

@Primusa感谢您的建议!

1 个答案:

答案 0 :(得分:-1)

不确定您的任务是什么,但是我不建议在这里递归。这是一个简单的代码(另请参阅@chepner的注释)

S = 'abc'
l = list(S)

result = []
for n in range(2**len(l)):
    result.append(''.join([l[i] for i in range(len(l)) if 2**i & n > 0]))

print(result)