你是如何在python中进行双因素的?

pyt*_*ner 5 python math factorial

很久以来我一直坚持这个问题.我设法做了一个递归因子.

def factorial(n):
     if n == 0:
         return 1
     else:
         return n * factorial(n-1)
Run Code Online (Sandbox Code Playgroud)

双因子对于偶数整数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

但我不知道做双重因子.有帮助吗?

Kab*_*bie 16

reduce(int.__mul__,range(n,0,-2))
Run Code Online (Sandbox Code Playgroud)

  • 等等,这真的被投票了吗?至少使用`operator.mul`(稍微清洁,因为你不输入下划线,并且是"类型不可知的").如果我要避免堆栈溢出(并且在下面提到,那不是*大多数因子分配的点),我会更喜欢明确的迭代版本. (3认同)
  • `reduce(long .__ mul __,range(n,0,-2),1L)`当产品太大时避免问题 (3认同)
  • 这被认为是混淆的python?哇.它看起来很正常,它只是一个标准的折叠,就像我在Haskell或Lisp中使用的那样. (2认同)

Can*_*ice 5

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

def doublefactorial(n):
     if n <= 0:
         return 1
     else:
         return n * doublefactorial(n-2)
Run Code Online (Sandbox Code Playgroud)

如果n是偶数,则当 时停止n == 0。如果n是奇数,那么它将在 时停止n == -1

  • 您需要在递归调用中调用 doublefactorial。犯了同样的错误。 (2认同)

Lov*_*ing 0

def doublefactorial(n):
     if n <= 0:
         return 1
     else:
         return n * doublefactorial(n-2)
Run Code Online (Sandbox Code Playgroud)

应该可以做到这一点。除非我误会了