为什么我的函数输出不正确?

why is my function outputting incorrectly?

我创建了一个阶乘函数,当整数 b 设置为 5 时,我的输出不正确,请问这是为什么? b 应该等于整数 120,我在编译后得到数字 -95449088 运行。

#include <stdio.h>
#include <stdlib.h>

int factorial(int x) 
{
    int i;
    for(i=1; i < x; i++)
    x *= i;
    return x;
}

int main() {
    int a=5, b;
    b = factorial(a);
    printf("%d\n", b);
}

这里您在 for-loop 的条件检查中使用了相同的 x 值,这是一团糟。相反,您可以将变量 x 存储到变量 temp 并使用此 temp 变量来检查条件。

请看下面更正后的代码

#include <stdio.h>
#include <stdlib.h>

int factorial(int x) 
{
    int i,temp=0;
    temp = x; //store the x to temp
    for(i=1; i < temp; i++){ 
        x *= i;
    }
    return x;
}

int main() {
    int a=5, b;
    b = factorial(a);
    printf("%d\n", b);
}

其他人解释说你应该避免混合输入和输出变量。这是一个很好的建议,作为初学者,您应该尝试遵守它。

但这是一个特例,在这里你可以重新使用输入值,前提是你使用递减循环:

int factorial(int x)
{
    int i;
    for (i = x-1; i >1; i--)
        x *= i;
    return x;
}

之所以有效,是因为它用 x 隐式初始化 return 值,然后将其乘以它下面的所有数字,这是阶乘的可能定义。