使用递归返回错误值的因子程序
问题描述:
我想用递归来计算因子,但是我的程序返回了错误的值。我无法理解递归功能。请帮助我理解递归如何工作。我的代码如下:使用递归返回错误值的因子程序
#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;
}
+2
这是一个正确的答案,但请解释推理,不要只是发布代码 – Li357
答
您正在使用递归以及while循环的功能fact
递归应更换循环。您还需要该功能的退出条件。对于阶乘,它可以是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,那么主程序应该给用户一个错误信息。
因为您已经错误地设置了功能 – Li357
在使用之前初始化'value'。另外功能也是错误的。 – Haris
@AndrewL。你能否让我知道函数中的错误在哪里 –