我试图在Python中进行乘法递归(乘以容器的所有值)。该函数接收列表的元素作为位置参数(* n)。执行时,我收到错误“达到最大递归深度”。但是,如果我只使用n而不是* n并在列表中发送元素,则代码可以正常工作。
def multiply(*n):
if n:
return n[0]*multiply(n[1:])
else:
return 1
multiply(5,1,4,9)
def multiply(n):
if n:
return n[0]*multiply(n[1:])
else:
return 1
multiply([5,1,4,9])
答案 0 :(得分:0)
在第一段代码中,表达式
multiply(n[1:])
只用一个参数调用multiply
。即,列表的其余部分。为了使用等于列表n[1:]
的内容的参数来调用它,再次使用splat运算符,如下所示:
multiply(*n[1:])
答案 1 :(得分:0)
当告诉函数期望使用*n
的任意数量的位置参数时,您需要以这种格式容纳它:使用多个参数,而不是包含所有参数的单个迭代。如果您有一个可迭代的元素,其元素应该用作参数,则在调用它时必须用*
解压缩它。第二个函数有效,因为它期望一个可迭代的参数,并且你发送一个可迭代的参数。
将n[1:]
替换为*n[1:]
。