c语言 - 阶乘尾递归返回模糊数字



我正在尝试一个阶乘尾递归程序,如果我输入数字 4,它的阶乘应该打印出来,但总是打印出 32767。 这段代码有什么问题?为什么打印出 32767 ?

int factTR(unsigned int n, unsigned int a)
{
if (n == 0)
{
return a;
}
else
{
return factTR(n - 1, n * a);
}
int fact(unsigned int n);
{
return factTR(n, 1);
}
}
int main(void)
{
printf("hin");
unsigned int a, n;
printf("Enter a positive number : ");
scanf("%u", &n);
factTR(n, a);
printf("The factorial of %u is %u", n, a);
return 0;
}

您正在将未初始化的值a传递给factTR()

factTR()旨在从fact()调用,这在递归中提供了正确的初始值。

然后,在main()中,您应该使用返回值来获取结果。C 参数按值传递,因此使用a作为参数不会更新其值。

nt factTR(unsigned int n, unsigned int a)
{
if (n == 0)
{
return a;
}
else
{
return factTR(n - 1, n * a);
}
}
int fact(unsigned int n);
{
return factTR(n, 1);
}
int main(void)
{
printf("hin");
unsigned int a, n;
printf("Enter a positive number : ");
scanf("%u", &n);
a = fact(n);
printf("The factorial of %u is %u", n, a);
return 0;
}

最新更新