我浏览过论坛,找不到递归地将数组中的所有元素相乘的方法。
我已经创建了以下代码,几乎可以满足我的需要。目标是不使用循环,只使用递归。
代码如下:

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]))

10-07 14:48