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

Python递归生成器问题:修复生成数字字符串切片所有可能求和结果的递归代码

修复递归生成器以返回数字字符串切片的所有求和结果

你的代码出现“返回生成器的生成器”问题,核心原因有两个:一是递归调用时直接yield了生成器对象,没有展开里面的实际结果;二是终止条件的位置不对,逻辑顺序有误。

修复后的代码

def rec(s, c):
    # 终止条件:字符串为空时,返回当前累计的求和结果
    if not s:
        yield c
        return
    # 遍历所有可能的切片长度(从1到字符串总长度)
    for i in range(1, len(s) + 1):
        # 使用yield from展开递归生成器的每一个结果
        yield from rec(s[i:], c + int(s[:i]))

关键修复点解释

  1. 调整终止条件位置:
    把s为空的判断移到函数最开头——当字符串被拆分完时,说明已经完成了一次完整的切片组合,此时直接返回当前累计的和c,并结束当前递归分支。

  2. 用yield from替代yield:
    原代码中yield rec(...)会把递归返回的生成器对象直接作为结果输出,而yield from会自动展开这个生成器,把里面的每一个求和结果逐个返回,这正是我们需要的效果。

测试示例

调用时需要传入初始累加和0,比如:

results = list(rec('891', 0))
print(results)  # 输出: [18, 99, 90, 891]

完全符合你预期的结果~

内容的提问来源于stack exchange,提问作者Pierric Mazodier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 08:17:46