Python中的自制阶乘函数

时间:2014-12-05 01:31:00

标签: python factorial

我知道一个有效的代码,但我似乎无法弄清楚为什么这段代码只返回0。任何人都可以帮我解决这个问题吗?

def factorial(x):
    hold = 1
    count = x
    if x == 0:
        return 1
    else:
        while count > 0:
            count -= 1
            hold *= count
            return hold

1 个答案:

答案 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