我浏览了各个论坛,发现与递归地乘以数组中的所有元素无关。
我创建了以下代码,几乎可以实现我想要的功能。目标是不使用循环,而仅使用递归。
代码如下:
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]
我知道我已经接近了,但是此时我完全不知所措。没有循环和仅递归的限制让我感到困惑!
答案 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(..)