没有0的新因子函数

时间:2018-02-25 17:48:19

标签: python factorial

因此,python中的标准阶乘函数定义为:

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

从n开始! := n *(n-1)* ... * 1,我们可以写n! as(n + 1)! /(n + 1)。因此0! = 1,如果x == 0,我们就不需要了。我试着在python中编写它,但是我没有工作。你能帮助我吗?

2 个答案:

答案 0 :(得分:0)

由于这是递归函数(return x * factorial(x-1)),因此您必须具有结束条件(if x == 0:)。

n! == (n+1)! / (n+1)确实可以将您的递归调用更改为:

def factorial(x):
    return factorial(x+1) / (x+1)

但那又没有结束条件 - >无休止的递归(你将调用下一个(n + 1)!而不是(n + 2)!等等永远(或直到你得到一个异常))。

顺便说一句,你可以让条件在1:

停止执行
if x == 1:
    return 1

答案 1 :(得分:0)

您不希望对不受限制的事物使用递归函数,因此我建议从标准库中进行一些导入

from functools import reduce
import operator

def fact(x):
    if not isinstance(x, int) or x <= 0:
        raise Exception("math error")
    else:
        return reduce(operator.mul, range(1, x + 1), 1)

print(fact("string"))    
print(fact(-5))
print(fact(0))
print(fact(5))

刚才意识到没有必要像这样的喧嚣:

def fact2(x):
    if not isinstance(x, int) or x <= 0:
        Exception("math error")
    else:
        y = 1
        while x > 1:
            y *= x
            x -= 1
        return y