为什么乘法符号的阶乘符号变为加法符号会产生这样的输出?

Why does a change in multiplication sign in factorial to addition sign give such an output?

问题:为什么输出的是11而不是12? i+4+i+3+i+2 = 1+4+1+3+1+2 = 12

代码:

def factorial(n):

    i = 1
    while n >= 1:
        #I changed the signs from * to + after getting the factorial from * method.

        i = i * n --> i = i + n
        n = n - 1
    return i

print factorial(4)

11

要获得预期的 i+4 + i+3 + i+2 和结果 12,您需要

def factorial(n):

    result = 0

    i = 1
    while n > 1:
        result += i + n
        n = n - 1

    return result

print(factorial(4))

我添加到新变量 result 所以我不更改 i,它一直是 1

我也使用 > 而不是 >= 所以它在 i+2 之后结束并且不添加 i+1

def factorial(n):

    i = 1
    while n >= 1:
        #I changed the signs from * to + after getting the factorial from * method.
        print(i)
        i = i + n
        n = n - 1
    return i

print(factorial(4))

如果你打印i,你会发现在第一次循环后i已经改变了。 所以输出应该是 1+4+3+2+1=11

(代题作者发表).

我的解题技巧:1. 理解循环的概念 2. 尝试自己打印答案 - i=5, n=3, i=8, n=2, i=10 , n=1, i=11