自定义阶乘功能无法按预期工作

时间:2017-04-01 13:04:08

标签: c++

这是一个简单的因子计算器。我用函数factorial调用了三个不同的参数来测试它。由于某种原因,该函数未返回预期值:

#include <iostream>
using namespace std;

int factorial(int a) {
  int result = 1;
  for (int i = 0; i < a; i++) {
    result *= result + 1;
  }
  return result;
}

int main() {
  cout << factorial(4) << endl; // returns 1806, expected 24
  cout << factorial(5) << endl; // returns 3263442, expected 120
  cout << factorial(6) << endl; // returns -1461943274, expected 720
  return 0;
}

2 个答案:

答案 0 :(得分:1)

我会在你的函数中使用while循环而不是for循环:

int factorial(int a) 
{
   int result = 1;
   while (a > 0)
   {
      result *= a;
      a--;
    }
  return result;
 }

编辑: 你的代码的一个问题是你没有在你的for循环中减少我:它应该是这样的:

 int factorial(int a) {
   int result = 1;
   for (int i = a; i > 0; i--)
   }
    result *= i;
   return result;
 }

答案 1 :(得分:1)

问题出在你的阶乘函数中,你加1为什么?您应该从i=1i<=a开始循环并乘以i而不是+1

按数学定义Factorial of n = n*(n-1)*(n-2)...3.2.1

您可以像这样修改代码

int factorial(int a) {
    int result = 1;
    for (int i = 1; i <=a; i++) {
        result = result * i;
    }
    return result;
}

或者你可以使用递归函数

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