使用递归返回错误值的阶乘程序

Factorial program using recurrsion returning wrong value

我正在尝试使用递归计算阶乘,但我的程序返回了错误的值。我无法理解递归功能。请帮助我理解递归的工作原理。我的代码如下:

#include <stdio.h>
#include <math.h>

int main() 
{
    //code
    int T,N,sol;
    scanf("%d\n",&T);

    while(T--) {
        scanf("%d\n",&N);

        sol=fact(N);
        printf("%d\n",sol);
    }

    return 0;
}

int fact(int n)
{
    int value;
    while(n>0) {
        value=n*fact(n-1);
        n=n-1;
    }

    return value;
}

用这个替换你的事实函数:

int fact(int n)
{
    int value = 1;
    if(n>0)
    {
        value=n*fact(n-1);
    }
    return value;
}

您在函数中使用了递归和 while 循环 fact

递归应该代替循环。您还需要该函数的退出条件。对于阶乘,它可以是 00 的阶乘是 1.

函数可以改写如下

int fact(int n)
{
  int value;
  if (n <0)
  {
     return -1;
  }
  else if (n == 0)
  { 
    return 1;
  }
  else
  {
    value=n*fact(n-1);
  }
  return value;
}

已编辑以添加负数条件。如果函数returns -1,那么主程序应该给用户一个错误信息。