C ++阶乘函数不起作用

时间:2014-02-11 03:07:33

标签: c++ factorial

有人可以帮我理解为什么这段代码不能正常工作?我知道它非常接近,我认为我只是忽略了一些东西。任何帮助表示赞赏。以下是我到目前为止的情况:

 #include <iostream>
    #define TEST_ARRAY_SIZE 4

    long int factorial(int num);

    long int factorial(int num){
        for(unsigned int i = 1; i <= num; i++) {
        num *= i;
        }
            return num;
    }

    int main() {
        int test[TEST_ARRAY_SIZE] = {1, 2, 5, 7};
        for (unsigned int i = 0; i < TEST_ARRAY_SIZE; i++) {
            std::cout << "Factorial of " << test[i] << " is " << factorial(test[i]) << std::endl;
        }
        return 0;
    }

3 个答案:

答案 0 :(得分:1)

您应该将return num;移到循环之外。就像现在一样,控制总是在第一个数字相乘后返回。

- 正确的代码 -

long int factorial(int num){
    long int res = 1; 
    for(unsigned int i = 1; i <= num; i++) {
    res *= i;
    }
return res;
}

答案 1 :(得分:1)

阶乘函数的主体不正确。您可以使用递归方法计算特定数字的阶乘。您的版本的更正程序如下:

    #include <iostream>
    #define TEST_ARRAY_SIZE 4

    long int factorial(int num);

    int main() {

       int test[TEST_ARRAY_SIZE] = {1, 2, 5, 7};

       for (unsigned int i = 0; i < TEST_ARRAY_SIZE; i++) {
           std::cout << "Factorial of " << test[i] << " is " << factorial(test[i]) << std::endl;
       }

       return 0;
    }

    long int factorial(int num){
       if (num == 1)
          return num;
       else
          return num * factorial(num-1);
    }

答案 2 :(得分:0)

这只是问题的一部分;这是一个适当的缩进会使虫子瞬间变得明显的情况。

除此之外,你为什么在循环中使用num?你应该保持原样并声明一个新的变量来复合并返回结果。

long int factorial(unsigned int num) {
   int x = 1;

   for(unsigned int i = 1; i <= num; i++) {
      x *= i;
   }

   return x;
}

其他注意事项:

  • 你不应该使用#define;你应该声明一个const。
  • 您正在将无符号与循环的factorial()中的签名进行比较。