C++ C++;阶乘函数不起作用

C++ C++;阶乘函数不起作用,c++,factorial,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++) {

有人能帮我理解为什么这个代码不能正常工作吗?我知道离这里很近,我想我只是忽略了一些东西。感谢您的帮助。以下是我到目前为止的情况:

 #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;
    }
#包括
#定义测试数组大小4
长整数阶乘(int-num);
长整数阶乘(整数){

对于(unsigned int i=1;i您应该将
return num;
移到循环之外。现在,控件总是在第一个数字相乘后返回

--正确的代码--

长整数阶乘(int num){
长整数res=1;

对于(unsigned int i=1;i这只是问题的一部分;在这种情况下,适当的缩进会使错误在瞬间显现出来

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

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

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

   return x;
}
long整数阶乘(unsigned int num){
int x=1;

对于(unsigned int i=1;i阶乘函数体不正确。您可以使用递归方法计算特定数字的阶乘。您版本的更正程序如下:

    #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);
    }
#包括
#定义测试数组大小4
长整数阶乘(int-num);
int main(){
int test[test_ARRAY_SIZE]={1,2,5,7};
for(无符号整数i=0;istd::您是否可以尝试将
返回
移动到循环外部。修复缩进将有助于使其更加明显。但这也会使循环无限大,因为您正在修改用作循环终止的变量。我这样做了,但它仍然没有输出正确的答案。
    #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);
    }