繁体   English   中英

拜托,有人能在我的代码中找到错误吗?

[英]Please, could someone find the error in my code?

def factorial(n):
    sum = 0;
    if (n==0 or n==1):
        return 1
    else:
        While(n!=0)
            sum = sum + factorial(n);
            n = n - 1;
            return sum

factorial(3);

python 3.6 我需要找到这个: 1! + 2! + ... + n!

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

这将返回 6

您正在尝试使用递归函数,这很好,但需要更改参数,在本例中为factorial(n-1)

尝试

In [3]: def factorial(n):
   ...:     if n == 0:
   ...:         return 1
   ...:     return n * factorial(n-1)
   ...: factorial(3)
   ...:
Out[3]: 6

鉴于您想有效地计算这个阶乘总和,建立起来比下降更容易。 例如f是递增阶乘, t是这些阶乘的总和:

def fac_sum(n):
    t, f = 0, 1
    for x in range(1, n+1):
        f *= x
        t += f
    return t

In []:
fac_sum(3)

Out[]:
9

注意:您可以使用itertools.accumulate()来简化:

import itertools as it
import operator as op

def fac_sum(n):
    return sum(it.accumulate(range(1, n+1), op.mul))

问题是您使用递归的方式很糟糕。 递归和 while 不是好朋友。

如果您省略 while 并执行

        sum = sum + factorial(n-1);

那应该有效

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM