您如何在python中使用双阶乘?

问题描述 投票:4回答:11

我在这个问题上困扰了很长时间。我设法做了一个递归阶乘。

def factorial(n):
     if n == 0:
         return 1
     else:
         return n * factorial(n-1)

双阶乘对于偶数整数n,双阶乘是小于或等于n的所有偶数正整数的乘积。对于奇数整数p,双阶乘是所有小于或等于p的奇数正整数的乘积。]

如果n为偶数,则n!! = n*(n - 2)*(n - 4)*(n - 6)* ... *4*2

如果p为奇数,则p!! = p*(p - 2)*(p - 4)*(p - 6)* ... *3*1

但是我不知道要做双重析因。有帮助吗?

我在这个问题上困扰了很长时间。我设法做了一个递归阶乘。 def factorial(n):如果n == 0:返回1否则:返回n * ...

python math factorial
11个回答
16
投票
reduce(int.__mul__,range(n,0,-2))

0
投票

我的递归解决方案版本,一行:


0
投票
dfact = lambda n: (n <= 0) or n * dfact(n-2)

4
投票

这与递归调用的结束条件和参数不同的阶乘不是一样吗?


1
投票
def double_fact(number):
    if number==0 or number==1:
        return 1
    else:
        return number*double_fact(number-2)

1
投票
def doublefactorial(n):
     if n <= 0:
         return 1
     else:
         return n * doublefactorial(n-2)

1
投票

这里的问题是,双阶乘数是为负实数(-1)定义的!! = 1,(-3)!! = -1(即使是负整数(例如-2,-4,...)也应具有+/- inf的解决方案),因此...在所有负数解决方案中都有不好的气味。如果要为现实定义双重因子,那么这些解决方案将不起作用。解决方案是使用伽马函数定义双阶乘。


1
投票

[开始Python 3.8,我们可以使用prod模块中的prod函数,该函数计算一个可迭代的所有元素的乘积,在我们的示例中为math


0
投票
n = 0

0
投票

我希望我能正确理解,但能正常工作


0
投票

def doublefactorial(n): if n in (0, 1): return 1 else: return n * doublefactorial(n-2)

© www.soinside.com 2019 - 2024. All rights reserved.