微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

阶乘尾递归返回模糊数

如何解决阶乘尾递归返回模糊数

我正在尝试一个阶乘尾递归程序,如果我输入数字 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 举报,一经查实,本站将立刻删除。