Python3递归生成字符串后缀列表时出现无限递归问题求助
递归实现单词后缀列表的问题与修复
需求与问题
需要实现递归函数,输入字符串返回所有后缀的列表。例如输入"abcdefg",期望输出:['abcdefg','bcdefg','cdefg','defg','efg','fg','g', '']。当前递归代码存在无限递归等问题,无法得到正确结果。
原始代码
def delete_head(my_string): my_list = list(my_string) my_list = my_list.pop(0) return my_list def list_to_string(my_list): my_string = "".join(my_list) return my_string def suffixes(x): list_suffixes = [x] #这样写合理吗? without_head = delete_head(x) without_head = list_to_string(without_head) #基准情况 if without_head == "" : return list_suffixes.append("''") #递归步骤 else : return list_suffixes.append(suffixes(without_head)) def main(): x = input() print( suffixes(x) ) if __name__ == "__main__": main()
核心问题分析
- 辅助函数逻辑错误:
delete_head里my_list.pop(0)返回的是被删除的第一个字符,而非剩余列表,导致后续得到的without_head永远是单个字符,永远无法触发基准情况,直接造成无限递归。 - 基准情况处理错误:
list_suffixes.append("''")返回的是None(列表append方法无返回值),且需要添加的是空字符串"",不是带引号的"''";同时基准条件的判断逻辑完全错误,因为without_head永远不会为空。 - 递归合并错误:
list_suffixes.append(suffixes(without_head))是把递归返回的整个列表作为单个元素加入,而非合并列表,且函数最终返回None而非目标列表。 - 冗余辅助函数:Python字符串支持切片操作
x[1:],直接就能得到删除头部后的剩余字符串,完全不需要转列表再操作。
修正后的递归实现
def suffixes(x): # 基准情况:输入为空时,返回仅包含空字符串的列表 if x == "": return [""] # 递归逻辑:当前字符串 + 去掉头部后的所有后缀列表 return [x] + suffixes(x[1:]) def main(): x = input().strip() print(suffixes(x)) if __name__ == "__main__": main()
代码说明
- 基准情况:当输入字符串为空时,返回
[""],这是递归的终止条件,确保不会无限递归。 - 递归逻辑:对于非空字符串,它的所有后缀就是自身加上去掉第一个字符后的所有后缀,用列表加法直接合并两个列表,简洁高效。
- 测试验证:输入
abcdefg,会输出完全符合需求的['abcdefg', 'bcdefg', 'cdefg', 'defg', 'efg', 'fg', 'g', '']。
内容的提问来源于stack exchange,提问作者HaveMercy
相关产品推荐
相关产品推荐

