为什么我的函数输出不正确?
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 值,然后将其乘以它下面的所有数字,这是阶乘的可能定义。
我创建了一个阶乘函数,当整数 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 值,然后将其乘以它下面的所有数字,这是阶乘的可能定义。