递归不适合位置论点



我正在尝试在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])

在第一个代码中,expression

multiply(n[1:])

只用一个参数调用multiply。即,其余的清单。为了用等于列表 n[1:]的内容的参数调用它,您再次使用SPLAT运算符,例如:

multiply(*n[1:])

当您告诉函数期望使用*n的任意数量的位置参数时,您需要以这种格式来容纳它:使用多个参数,而不是包含所有参数的单个峰值。如果您的元素应用作参数,则在调用它时必须用*拆开它。第二个函数之所以起作用,是因为它期望单个,可触觉的参数,并且您将其发送一个单一的,可观的参数。

*n[1:]替换n[1:]

相关内容

  • 没有找到相关文章

最新更新