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]