You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()

核心问题分析

  1. 辅助函数逻辑错误:delete_head里my_list.pop(0)返回的是被删除的第一个字符,而非剩余列表,导致后续得到的without_head永远是单个字符,永远无法触发基准情况,直接造成无限递归。
  2. 基准情况处理错误:list_suffixes.append("''")返回的是None(列表append方法无返回值),且需要添加的是空字符串"",不是带引号的"''";同时基准条件的判断逻辑完全错误,因为without_head永远不会为空。
  3. 递归合并错误:list_suffixes.append(suffixes(without_head))是把递归返回的整个列表作为单个元素加入,而非合并列表,且函数最终返回None而非目标列表。
  4. 冗余辅助函数: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 21:37:27