递归地将数组Python中的所有值相乘

时间:2018-10-21 20:43:15

标签: python recursion

我浏览了各个论坛,发现与递归地乘以数组中的所有元素无关。

我创建了以下代码,几乎可以实现我想要的功能。目标是不使用循环,而仅使用递归。

代码如下:

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]

我知道我已经接近了,但是此时我完全不知所措。没有循环和仅递归的限制让我感到困惑!

3 个答案:

答案 0 :(得分:2)

您的multAllAux函数返回一个list。如果将一个列表追加到另一个列表中,则会得到您现在正在获得的这种嵌套列表类型的结构。

如果您改为使用“扩展”功能;它将按预期工作。

>>> a = [1, 2, 3]
>>> a.extend([4, 5])
>>> a
[1, 2, 3, 4, 5]

extend从第二个列表中获取 个元素并将其添加到第一个列表中,而不是添加第二个 list本身,即{{1 }}!

答案 1 :(得分:2)

您的函数还会在列表的末尾返回零,而您不需要。您可以尝试以下方法:

def mult(k, A: list) -> list:
    return [k * A[0]] + mult(k, A[1:]) if A else []

答案 2 :(得分:1)

问题在这里:

if (request.HasFormContentType && request.Form != null && request.Form.Count() > 0)
{
            dynamic form = new { };
            foreach (var f in request.Form)
                form[f.Key] = f.Value;
            d.form = form;
}

B.append(multAllAux(k,A[1:]))) 的工作是接受参数,将其视为单个元素,然后将该元素添加到列表的末尾。您想要的是连接到列表(即,要添加的项目应视为元素列表,而不是一个元素)。

您可以说:.append(..)或只使用B = B + multAllAux(..)

+=

顺便说一句,如果您想将一个数字乘以一个列表,则有一个非常相似的结构:B += multAllAux(...) 。请注意,这取决于您使用的是Py2还是Py3。

map(..)