我浏览过论坛,找不到递归地将数组中的所有元素相乘的方法。
我已经创建了以下代码,几乎可以满足我的需要。目标是不使用循环,只使用递归。
代码如下:
def multAll(k,A):
multAllAux(k,A)
return A[:]
def multAllAux(k,A):
B = [0]
if A == []:
return 0
else:
B[0] = (A[0] * k)
B.append(multAllAux(k,A[1:]))
return B
print(multAllAux(10, [5,12,31,7,25] ))
电流输出为:
[50, [120, [310, [70, [250, 0]]]]]
但是,它应该是:
[50,120,310,70,250]
我知道我很接近,但现在我完全不知所措。没有循环和递归的限制让我感到困惑!
最佳答案
问题在于:
B.append(multAllAux(k,A[1:])))
.append(..)
的作用是接受参数,将其视为单个元素并将该元素添加到列表的末尾。您需要的是连接到列表(即要添加的项应被视为元素列表,而不是单个元素)。你可以这样说:
B = B + multAllAux(..)
或者只使用+=
B += multAllAux(...)
顺便说一句,如果你想把一个数字乘以一个列表,有一个非常相似的构造:
map(..)
。请注意,根据您使用的是Py2还是Py3,这一行为略有不同。print(map(lambda x: x * 10, [5,12,31,7,25]))