C中的阶乘计算

factorial calculation in C

我想编写一个简单的程序来使用 C 计算给定数字的阶乘。但是我的代码似乎有一些我无法检测到的逻辑错误。很乐意提供帮助。

int fact(int n);
int main(void)
{
    int num = get_int("Type number: ");
    printf("%i\n", fact(num));
}

//define function

int fact(int n)
{

    for (int i = 1; i < n; i++)
    {
        n *= i;
    }
    return n;
}

你不能用n来计算。

你必须用另一个变量来保存总数

int fact(int n)
{
    int product = 1;
    for (int i = 1; i <= n; i++)
    {
        product = product  * i;
    }
    return product;
}

在数学中,正整数 N 的阶乘表示为 N!,是所有小于或等于 N 的正数 integers 的乘积:

N!=N*(N-1)*(N-2)*(N-3)*.......*1
     +-------------------------+
     notice that this is: (N-1)!  <==>  So, N! = N*(N-1)!

我们可以使用这些数学事实以 2 种不同的形式实现阶乘函数,recursiveiterative 方法:

递归方法

size_t rec_factorial(size_t n)
{
    /*Base case or stopping condition*/
    if(n==0)
    {
        /* 0! = 1 */
        return 1;
    }
    /*n! = n * (n-1)!*/
    return n * rec_factorial(n-1);
}

迭代方法

size_t factorial(size_t n)
{
  size_t j = 1;
  size_t result = 1;
  while(j <= n){
    result *= j; /* n!=n*(n-1)*(n-2)*(n-3)*....1 */
    ++j;
  }
  return result;
}