了解如何在c ++

时间:2015-11-22 12:45:09

标签: c++ factorial

我有这个代码可以计算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循环”告诉我们哪些整数可以计算出阶乘。 我理解“else if”部分告诉我们如果输入一个小于0的整数,我们会得到一个错误。 但是我不明白这部分代码。

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

这部分代码有什么作用?

为什么n会递减--n;?我有点困惑,因为我看到它的方式,如果n&gt; 0,你减去说--n,肯定会意味着n&lt; 0,因为else if你只会收到错误?

2 个答案:

答案 0 :(得分:2)

  

这段代码的作用是什么?

这是因子值的实际计算(例如4! = 24)。

  

为什么n被递减--n;?

因为它必须从你想要计算的阶乘数减去零。例如,“四个因子”(书面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

因此,无论价值如何,您都需要从0!向下递减到n。另请注意,这是递归定义。

  

我有点困惑,因为我看到它的方式,如果n&gt; 0,你减去说--n,肯定会意味着n&lt; 0

错误。 --n是减去一个或n = n - 1;的简写。 意味着否定/ nn = -n;的反对。

答案 1 :(得分:0)

do-while循环是因子算法的实质内容(你知道什么是因子吗?)。其次,一旦程序进入if(n > 0)分支,控制流程甚至不会考虑在此之后输入else if(n < 0)。相反,它继续return result;

然而,n完成后do-while不会为负数。它将是0