如何在python中使用递归为小于或等于n的所有正偶数整数的乘积生成阶乘函数
def阶乘(n): 我似乎无法解决这个问题。我可以找到偶数阶乘的偶数整数,但我似乎无法同时找到奇数阶乘的偶数整数。我已经做了好几天了。我对python非常陌生,因此任何帮助都将非常感激。谢谢 这应该行得通如何在python中使用递归为小于或等于n的所有正偶数整数的乘积生成阶乘函数,python,recursion,factorial,Python,Recursion,Factorial,def阶乘(n): 我似乎无法解决这个问题。我可以找到偶数阶乘的偶数整数,但我似乎无法同时找到奇数阶乘的偶数整数。我已经做了好几天了。我对python非常陌生,因此任何帮助都将非常感激。谢谢 这应该行得通 def factorial(n): if n % 2 != 0: n -= 1 return 1 if (n < 1) else n * factorial(n-2) print(factorial(6)) print(factorial(7))
def factorial(n):
if n % 2 != 0:
n -= 1
return 1 if (n < 1) else n * factorial(n-2)
print(factorial(6))
print(factorial(7))
如您所见,n=6
或n=7
(偶数和奇数)等于
factorial = lambda x: functools.reduce(lambda x, y: x*y, range(2, x+1, 2))
使用内部方法
functools.reduce
以防止最大递归深度如果要手动计算5,将从哪个数字开始?13岁?25美元?对于其他一些奇数n?如果你没有精确地达到0,请更改你的条件以避免无休止的循环。。。用手做你的逻辑,从给定的n/3开始,你会看到。还可以查找模运算符%
来检测偶数/奇数。调用阶乘(n-2)
会更有效,因为n-1
保证是奇数。@thierrylahuille它调用阶乘(n-2)
值得注意,并允许您编写math.prod(范围(2,x+1,2))
,而不是functools.reduce(λx,y:x*y,范围(2,x+1,2))
48
48
factorial = lambda x: functools.reduce(lambda x, y: x*y, range(2, x+1, 2))