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

问题描述:

我想用递归来计算因子,但是我的程序返回了错误的值。我无法理解递归功能。请帮助我理解递归如何工作。我的代码如下:使用递归返回错误值的因子程序

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

因为您已经错误地设置了功能 – Li357

+1

在使用之前初始化'value'。另外功能也是错误的。 – Haris

+0

@AndrewL。你能否让我知道函数中的错误在哪里 –

与此一更换您的事实功能:

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

这是一个正确的答案,但请解释推理,不要只是发布代码 – Li357

您正在使用递归以及while循环的功能fact

递归应更换循环。您还需要该功能的退出条件。对于阶乘,它可以是0,因子01

的功能可以被改写为下面

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,那么主程序应该给用户一个错误信息。

+0

如果您传递负值,则递归永远不会结束。 – Li357

+0

负数的因子未定义。如果我们期望一个负数,那么应该给出其他类型的错误,最好是在输入阶段。函数也可以返回-1来指示错误。 –

+0

然后为此设置一个案例 – Li357