因此,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中编写它,但是我没有工作。你能帮助我吗?
答案 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