因子函数产生错误的结果

-3 python recursion factorial

我知道有多种方法可以计算整数的阶乘,也有一个math模块.但是我试图将一个返回错误结果的简单函数放在一起.我很想知道这里出了什么问题.例如,如果我将2作为参数传递它返回3,如果3则返回8.

>>>def factorial(n):

        if n > 0:
            result = n * n-1
            factorial(n-1)
            return result 

>>>factorial (2)

   3
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

小智 8

你在这里错过了几件不同的东西.首先,您需要实际乘以递归调用的结果,否则递归不会为您做任何事情.其次,您需要为递归结束指定基本案例.也就是说,当n == 0时,你需要告诉函数该做什么.你正在寻找类似的东西:

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

我的python是生锈的,所以语法可能会关闭,但你明白了.

另外,请注意,您获得的回报的原因是您的函数基本上是计算n*n-1,由于操作顺序给您一个小于平方n.

还有一件事,只是为了好玩.我到目前为止编写的函数将为大数字创建一个大堆栈,这可能是也可能不是一个好主意.所以另一种方法是使其尾递归.许多编译器将优化尾递归函数,但根据Python没有的评论.要做到这一点,你想实现一个累加器,如下所示:

def factorial(acc, n):
    if n == 0:
        return acc
    elif n > 0:
        return factorial(n*acc, n-1)
Run Code Online (Sandbox Code Playgroud)

然后,您将调用该函数factorial(1,n),或者您也可以将其编写为帮助您处理该部分的辅助函数.