在编译时我遇到了错误 错误:作为赋值fac(0)= 1的左操作数所需的左值; 错误:作为赋值fac(i)的左操作数所需的左值= i * fac(i-1);
#include<stdio.h>
int fac(int i)
{
int j;
fac(0)=1;
fac(i)=i*fac(i-1);
printf("%d",fac(i));
}
int main()
{
int x,y;
printf("enter the number");
scanf("%d",&x);
if(x>=0)
{
fac(x);
}
}
答案 0 :(得分:2)
在C中,您不会以这种方式返回函数值;相反,你会写类似
的东西 if ( i == 1 || i == 0 )
return 1;
return i * fac(i - 1);
问题是fac(0)
的结果没有引用您可以写入的对象;这就像尝试为1
分配新值一样 - 你无法做到。
答案 1 :(得分:0)
fac(0)=1;
无效c,你没有像那样为递归赋值。
好像你想要更接近的东西if(j==0) {
return 1;
}
fac(i)=i*fac(i-1);
在此同样,您无法为fac(i)
分配值,因为它是一个函数调用。
答案 2 :(得分:0)
fac(0)=1;
这里fac
是一个函数。 fac(0)
将返回一些值(比如x)。然后,您无法将返回的值指定为1.至少不在C中。
您要做的是将输入为0时将函数设置为返回1。
这可以通过
来实现int fac(int i)
{
int j;
if (i == 0)
{
return 1;
}
else
{
return (i*fac(i-1));
}
printf("%d",fac(i));
}