使用recurrsion返回错误值的因子程序

时间:2016-08-04 05:57:55

标签: c recursion factorial

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

#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;
}

2 个答案:

答案 0 :(得分:3)

用这个替换你的事实功能:

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

答案 1 :(得分:0)

您在函数fact

中使用递归和while循环

递归应该替换循环。您还需要该函数的退出条件。对于阶乘,它可以是0,而0的阶乘是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;
}

编辑为负数添加条件。如果函数返回-1,那么主程序应该给用户一个错误消息。