自定义阶乘函数未按预期工作

Custom factorial function not working as expected

本文关键字:工作 阶乘 函数 自定义      更新时间:2023-10-16

这是一个简单的阶乘计算器。我用三个不同的参数调用了函数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;
}

问题出在您的阶乘函数中,您正在添加 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);
}

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

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

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

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