Python:递归生成器

我想递归生成一串数字切片的所有可能和。例如:

Input: '891'
Output: 18, 99, 90, 891

In details:
    8+9+1 = 18
    8+91 = 99
    89+1 = 90
    891 = 891

但是,我编写的代码产生了生成器的生成器:

# s: string of digits, c: sum of slices
def rec(s,c):
    for i in range(1,len(s)+1):
        if s=='': yield c
        else: yield rec(s[i:],c+int(s[:i]))

我该如何解决?

回答

有时很难做到正确。但是你通过添加额外的参数来混淆自己:

def rec(s):
    # No split.
    yield int(s)

    # Split.
    for i in range(1, len(s)):
        left = int(s[:i])
        for right in rec(s[i:]):
           yield left + right

确实:

>>> list(rec("891"))
[891, 99, 18, 90]


以上是Python:递归生成器的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>