我有两个整数列表:
A=[1,5,3]
B=[4,5,9,8]
我想使用递归方法得到这两个的总和,并且额外的整数只是追加到结果中。 所以我应该得到:
[5,10,12,8]
以下是我的功能:
def sum(A,B):
a = len(A)
b = len(B)
if a == 0 :
return B
elif b == 0 :
return A
elif a >= b :
return A[0] + B[0] + sum(A[1:b],B[1:])+ **list1[(b+1):]**
else:
return A[0] +B[0] + sum(A[1:],B[1:a])+**list2[(a+1):]**
对于“****”粗体部分,我不确定我是否正确, 而且,当我运行程序时,我得到了 “返回A [0] + B [0] +总和(A [1:b],B [1:])+ A [(b + 1):]
TypeError:+:'int'和'list'“
不支持的操作数类型
答案 0 :(得分:3)
您的递归案例不正确。您应该返回一个列表总和,这意味着您的A[0] + B[0]
必须添加为单个元素列表。基本上,这就是你正在做的事情:
In [559]: 1 + [123]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-559-01aa05245fd1> in <module>()
----> 1 1 + [123]
TypeError: unsupported operand type(s) for +: 'int' and 'list'
这就是你应该做的事情:
In [560]: [1] + [123]
Out[560]: [1, 123]
这是递归案例的工作版本,稍微整理一下。
In [555]: def sum(A, B):
...: if not len(A):
...: return B
...: elif not len(B):
...: return A
...:
...: return [A[0] + B[0]] + sum(A[1:], B[1:])
...:
In [556]: sum(A, B)
Out[556]: [5, 10, 12, 8]
有趣的是,您可以将此功能缩短为一行。
In [557]: def sum(A, B):
...: return A if not len(B) \
else (B if not len(A) \
else ([A[0] + B[0]] + sum(A[1:], B[1:])))
...:
In [558]: sum(A, B)
Out[558]: [5, 10, 12, 8]
答案 1 :(得分:2)
def sum(l1, l2, result = None, id = 0):
if result is None:
result = []
if id < min(len(l1), len(l2)):
result.append(l1[id] + l2[id])
return sum(l1, l2, result, id + 1)
else:
if len(l1)>len(l2):
biggest=l1
else:
biggest=l2
return result+biggest[id:]
输入
r=sum([1,5,3,2],[4,5,9,8,15])
输出
[5, 10, 12, 10, 15]
答案 2 :(得分:1)
执行此操作的非递归方式:
>>> import itertools
>>> a = [1,5,3]
>>> b = [4,5,9,8]
>>> [sum(i) for i in itertools.zip_longest(a,b,fillvalue=0)]
[5, 10, 12, 8]
答案 3 :(得分:0)
你可以试试这个:
def the_sum(a, b, c):
if not a[1:] and b[1:]:
c.append(b[0]+a[0])
return the_sum(a, b[1:], c)
if not b[1:]:
c.append(b[0])
return c
if a[1:] and b[1:]:
c.append(a[0]+b[0])
return the_sum(a[1:], b[1:], c)
print(the_sum([1,5,3], [4,5,9,8], []))
输出:
[5, 10, 12, 8]