对变量的赋值有一些问题
int fac(int n)
{
int f=0;
while (n < 0)
{
printf("错误数据请重新输入:");
scanf("%d", &n);
}
if (n == 0 || n == 1)
{
n = 1;
}
else
{
f = fac(n - 1) * n;
}
return f;
}
这是一个实现阶乘的函数,为什么返回值f=0,else中对f的赋值不起作用吗?
为了修复这个问题,可以将变量 f 的初始值设置为1,这样第一次递归调用的时候,f 乘以 n 的值就是 n,而不是0。此外,递归调用中 f 的值应该是调用函数的返回值与 n 的乘积,而不是直接乘以 n。因此,可以将递归调用的结果直接赋值给 f,然后返回 f。修改后的函数如下:
int fac(int n)
{
int f = 1;
while (n < 0)
{
printf("错误数据请重新输入:");
scanf("%d", &n);
}
if (n == 0 || n == 1)
{
f = 1;
}
else
{
f = fac(n - 1) * n;
}
return f;
}
这样,函数就能正确计算阶乘了。