我知道一个有效的代码,但我似乎无法弄清楚为什么这段代码只返回0
。任何人都可以帮我解决这个问题吗?
def factorial(x):
hold = 1
count = x
if x == 0:
return 1
else:
while count > 0:
count -= 1
hold *= count
return hold
答案 0 :(得分:3)
它会返回0
,因为count
将在您的上一个循环中终于0
。循环将在count = 1
执行,您将乘以0
,因为您在 乘以之前从计数 中减去1
。乘法后你必须减去1
:
def factorial(x):
hold = 1
count = x
if x == 0:
return 1
else:
while count > 0:
hold *= count
count -= 1 # moved this statement to the bottom
return hold
然而,更好的功能是:
def factorial(x):
hold = 1
for number in xrange(2, x+1): # or range in python 3
hold *= number
return hold