如何解决阶乘尾递归返回模糊数
我正在尝试一个阶乘尾递归程序,如果我输入数字 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("hi\n");
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("hi\n");
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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。