python中的所有子字符串都是通过递归实现的

python中的所有子字符串都是通过递归实现的,python,recursion,substring,Python,Recursion,Substring,我试图通过python中的递归找到子字符串列表。但我收到了这样的错误信息- def lst_substrings(s,ans): if len(s) == 0: print(ans) ch=s[0] ros=s[1:] lst_substrings(ros,ans) lst_substrings(ros,ans+ch) s="binod" ans=" " lst_substrings(s,

我试图通过python中的递归找到子字符串列表。但我收到了这样的错误信息-

def lst_substrings(s,ans):
    if len(s) == 0:
        print(ans)
    ch=s[0]
    ros=s[1:]
    
    lst_substrings(ros,ans)
    lst_substrings(ros,ans+ch)

s="binod"
ans=" "
lst_substrings(s,ans)
回溯(最近一次呼叫最后一次):
文件“”,第12行,在
文件“”,第7行,以lst\u子字符串形式
文件“”,第7行,在lst_子字符串中
文件“”,第7行,在lst_子字符串中
[上一行重复了2次]
文件“”,第4行,在lst_子字符串中
索引器错误:字符串索引超出范围

同样的逻辑获取cpp中的结果。我想通过这种方法。有人能帮我修改代码吗?

我不知道预期的返回是什么,但是错误是由函数从不返回这一事实引起的,因此添加返回将修复
索引器

编辑最好将ans结果附加到单独的列表中,如下所示

Traceback (most recent call last):
  File "<string>", line 12, in <module>
File "<string>", line 7, in lst_substrings
  File "<string>", line 7, in lst_substrings
  File "<string>", line 7, in lst_substrings
  [Previous line repeated 2 more times]
  File "<string>", line 4, in lst_substrings
IndexError: string index out of range

一般来说,应该将渲染(打印)与计算结果分开。这将使函数更简单,并且避免在不属于该函数的全局列表上使用副作用

result = []
def lst_substrings(s, ans):
    if len(s) == 0:
        print(ans)
        result.append(ans)
        return
    ch = s[0]
    ros = s[1:]

    lst_substrings(ros, ans)
    lst_substrings(ros, ans + ch) 


s = "binod"
ans = " "
lst_substrings(s, ans)
for item in result:
    print(item)

输入字符串“aabc”的预期输出是什么?请向我们展示一些示例输入和预期输出。这是否回答了您的问题?当字符串长度为0时,
lst_子字符串
应返回,以便跳过
ch=s[0]
。请提供字符串的示例输出。对于函数本身,需要更好地考虑
基本情况
递归情况
# computing (as a generator)
def getSubStrings(S):
    for i in range(1,len(S)): yield S[:i]
    if S: yield from getSubStrings(S[1:])

# rendering (i.e. printing results)        
for ss in getSubStrings(s):print(ss)

b
bi
bin
bino
i
in
ino
n
no
o