是否可以使用递归来使用 Python 查找数组中每个元素的总和?
Is is possible to use recursion to find the sum of each elements of an array using Python?
我在使用递归添加数组的每个元素并生成包含它们总和的另一个列表时遇到问题。
def add(l1,l2,n,counter): # define new user function named add
if c >= n: # base case
# if counter is now greater than the length of the list then return empty array
return []
return l1[c] + l2[c], add(l1,l2,n,c+1) # recursion
list1 = [7,8,9] # list 1
list2 = [10,11,12] # list 2
print(add(list1,list2,3,0)) # prompt the output of the add() function
add()函数的作用,在本例中,应该return一个值为[17,19,21]的列表。相反,它是 returning 一个值为 (17, (19, (21, [ ]))) 的元组.
有人可以告诉我我可以在我的代码中改进什么吗?
感谢您提供的任何帮助。
首先,这道题根本不需要递归。但考虑到这是你的问题,你可以做的是 return 列表而不是元组。
所以而不是这个
return l1[c] + l2[c], add(l1,l2,n,c+1) # recursion
你可以return这个
return [l1[c] + l2[c], add(l1,l2,n,c+1)] # recursion
但是这会给你 [17, [19, [21, []]]] 作为结果,因为在每次递归时你都在 returning 一个列表。
为了克服这个问题,您应该在每次迭代时传播 returned 列表。最终代码如下所示:
return [l1[c] + l2[c], *add(l1,l2,n,c+1)] # recursion
* 运算符展开 returned 列表,结果您得到一个列表。
我个人会像下面这样写,这不关心列表的长度,甚至允许一个列表比另一个长等等。它检查两个列表是否为空,如果是,它 returns 一个空列表,否则它从每个列表中获取第一个值,或者如果列表没有更多值则默认为 0。然后它使用每个列表中的剩余值再次调用该函数。等等。
def add(l1, l2): # define new user function named add
if len(l1) == 0 and len(l2) == 0:
return []
n1 = l1[0] if l1 else 0
n2 = l2[0] if l2 else 0
t = n1 + n2
return [t] + add(l1[1:], l2[1:]) # recursion
list1 = [7, 8, 9, 50] # list 1
list2 = [10, 11, 12] # list 2
print(add(list1, list2))
输出
[17, 19, 21, 50]
我在使用递归添加数组的每个元素并生成包含它们总和的另一个列表时遇到问题。
def add(l1,l2,n,counter): # define new user function named add
if c >= n: # base case
# if counter is now greater than the length of the list then return empty array
return []
return l1[c] + l2[c], add(l1,l2,n,c+1) # recursion
list1 = [7,8,9] # list 1
list2 = [10,11,12] # list 2
print(add(list1,list2,3,0)) # prompt the output of the add() function
add()函数的作用,在本例中,应该return一个值为[17,19,21]的列表。相反,它是 returning 一个值为 (17, (19, (21, [ ]))) 的元组.
有人可以告诉我我可以在我的代码中改进什么吗? 感谢您提供的任何帮助。
首先,这道题根本不需要递归。但考虑到这是你的问题,你可以做的是 return 列表而不是元组。 所以而不是这个
return l1[c] + l2[c], add(l1,l2,n,c+1) # recursion
你可以return这个
return [l1[c] + l2[c], add(l1,l2,n,c+1)] # recursion
但是这会给你 [17, [19, [21, []]]] 作为结果,因为在每次递归时你都在 returning 一个列表。
为了克服这个问题,您应该在每次迭代时传播 returned 列表。最终代码如下所示:
return [l1[c] + l2[c], *add(l1,l2,n,c+1)] # recursion
* 运算符展开 returned 列表,结果您得到一个列表。
我个人会像下面这样写,这不关心列表的长度,甚至允许一个列表比另一个长等等。它检查两个列表是否为空,如果是,它 returns 一个空列表,否则它从每个列表中获取第一个值,或者如果列表没有更多值则默认为 0。然后它使用每个列表中的剩余值再次调用该函数。等等。
def add(l1, l2): # define new user function named add
if len(l1) == 0 and len(l2) == 0:
return []
n1 = l1[0] if l1 else 0
n2 = l2[0] if l2 else 0
t = n1 + n2
return [t] + add(l1[1:], l2[1:]) # recursion
list1 = [7, 8, 9, 50] # list 1
list2 = [10, 11, 12] # list 2
print(add(list1, list2))
输出
[17, 19, 21, 50]