了解如何在 C++ 中使用阶乘函数

Understanding how to use the factorial function in c++

我有这段代码可以计算 0 到 9 之间所有整数的阶乘。

#include <iostream>
using namespace std;

int factorial(int n)
{
    int result = 1;
    if ( n > 0) {
        do {
        result *= n;
        --n;
      } while (n > 1);
    }
    else if ( n < 0) {
       cout << "Error in argument \targument = " <<
        n << "\n";

    }
    return result;
}
    int main()
    {
    for (int i=0 ; i < 10; ++i)
        cout << i << "! = "<< factorial(i) << "\n";
    return 0;

}   

我知道 int main 部分中的 "for loop" 告诉我们要计算哪些整数的阶乘。 我知道 "else if" 部分告诉我们,如果我们输入一个小于 0 的整数,我们会得到一个错误。 但是我不明白这部分代码。

        if ( n > 0) {
            do {
            result *= n;
            --n;

这部分代码的作用是什么?

另外,为什么 n 会递减 --n;?我有点困惑,因为在我看来,如果 n > 0 并且你通过说 --n 递减,那肯定意味着 n < 0 并且你会因为 else if 而得到一个错误?

do-while 循环是阶乘算法的核心(你知道阶乘是做什么的吗?)。其次,一旦程序进入 if(n > 0) 分支,控制流甚至不会考虑之后进入 else if(n < 0) 。相反,它继续 return result;.

不过,do-while完成后,n不会是负数。它将是 0.

What does this part of the code do?

也就是实际计算的阶乘值(如4! = 24)。

Also why is n being decremented --n;?

因为它必须从您要计算阶乘的数字开始下降到零。例如"four factorial"(写作4!)表示:

4! = 4 * 3!
 3! = 3 * 2!
  2! = 2 * 1!
   1! = 1 * 0!
    0! = 1     (by definition)
   1! = 1 * 1
  2! = 2 * 1 * 1
 3! = 3 * 2 * 1 * 1
4! = 4 * 3 * 2 * 1 * 1
   = 24

因此,无论值是多少,您都需要从 n 递减到 0!。另请注意,这是一个 递归 定义。

I am a little confused because the way I see it, if n > 0 and you decrement by saying --n, surely that will mean n < 0

错了。 --n 是 shorthand 减一,或 n = n - 1;。它 不是 意味着 n 的 negation/opposite 或 n = -n;.