使用Python中的Reduce函数求阶乘

Who*_*erg 4 python reduce map factorial

您好,我正在尝试编写一个函数来查找任何给定数字的阶乘积。例如,对于阶乘 (6),我将得到 6*5*3*2*1 的乘积。

因此对于阶乘(3),输出将为 6。

到目前为止我拥有的功能是:

import functools 

def mult(x, y):
    return x * y


def factorial(n):
    if n == 0:
        return 1
    else:
        functools.reduce(mult(n,factorial(n - 1)))
Run Code Online (Sandbox Code Playgroud)

但我不断收到一个错误,指出 Python 需要 2 个参数,但给出了 1 个参数。我知道我必须以range某种方式使用,但我无法弄清楚。如何编辑现有代码以使其正常运行?

mgi*_*son 8

你可以很容易地做到这一点:

>>> import functools, operator
>>> functools.reduce(operator.mul, xrange(1, 6))
120
Run Code Online (Sandbox Code Playgroud)

请注意,第一个参数是一个函数(您正在传递函数调用的结果)。第二个参数是一个可迭代的。另请注意,以这种方式编写,不需要递归......

operator.mul相当于你的mult功能


Sur*_*sta 5

import functools

def factorial(n):
    if n == 0:
        return 1
    else:
        return functools.reduce(lambda x,y: x*y, range(1,n+1))

print factorial(3)
Run Code Online (Sandbox Code Playgroud)

当然,如果您愿意,您可以使用自己的 multi 函数而不是 lambda。