使用递归返回错误值的阶乘程序
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
递归应该代替循环。您还需要该函数的退出条件。对于阶乘,它可以是 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;
}
已编辑以添加负数条件。如果函数returns -1,那么主程序应该给用户一个错误信息。
我正在尝试使用递归计算阶乘,但我的程序返回了错误的值。我无法理解递归功能。请帮助我理解递归的工作原理。我的代码如下:
#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
递归应该代替循环。您还需要该函数的退出条件。对于阶乘,它可以是 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;
}
已编辑以添加负数条件。如果函数returns -1,那么主程序应该给用户一个错误信息。