阶乘尾递归returns模糊数

Factorial tail recursion returns vague number

我正在尝试一个阶乘尾递归程序,如果我输入数字 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() 中,您应该使用 return 值来获取结果。 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;
}