在python中优化阶乘函数

问题描述

因此,我已经使用拆包参数(* x)实现了此功能,但是我想使其显示结果返回它,并且我希望它很好优化意味着我仍然需要将其作为两行功能

1.def fac(*x):
    2.return (fac(list(x)[0],list(x)[1] - 1)*list(x)[1]) if list(x)[1] > 0 else 1//here i need the one line to print the factorial

我尝试通过实现lambda来实现这一目标,但我不知道如何传递* x参数

解决方法

您的阶乘lambda是正确的。我认为您想为列表[1,2,3]计算阶乘并输出结果,这就是您可以实现的方式。

fact = lambda x: x*fact(x-1) if x > 0 else 1
print(*[fact(i) for i in [1,2,3]])

将输出:1,2,6

另一种选择,如果您使用的是python 3.8 ,则需要对新的walrus运算符(:=)使用列表推导,这会比较棘手,但是将计算并输出所有阶乘,直到n包含在内,同时仍适合您所需的两行。

fac,n = 1,5
print(*[fac for i in range(1,n+1) if (fac := fac*i)])

将输出:1、2、6、24、120