我在这个问题上困扰了很长时间。我设法做了一个递归阶乘。
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 * ...
reduce(int.__mul__,range(n,0,-2))
我的递归解决方案版本,一行:
dfact = lambda n: (n <= 0) or n * dfact(n-2)
这与递归调用的结束条件和参数不同的阶乘不是一样吗?
def double_fact(number):
if number==0 or number==1:
return 1
else:
return number*double_fact(number-2)
def doublefactorial(n):
if n <= 0:
return 1
else:
return n * doublefactorial(n-2)
这里的问题是,双阶乘数是为负实数(-1)定义的!! = 1,(-3)!! = -1(即使是负整数(例如-2,-4,...)也应具有+/- inf的解决方案),因此...在所有负数解决方案中都有不好的气味。如果要为现实定义双重因子,那么这些解决方案将不起作用。解决方案是使用伽马函数定义双阶乘。
n = 0
我希望我能正确理解,但能正常工作
def doublefactorial(n):
if n in (0, 1):
return 1
else:
return n * doublefactorial(n-2)