在编译时我得到错误错误:左值作为赋值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);
}
}
在C中,您不会以这种方式返回函数值;相反,你会写类似的东西
if ( i == 1 || i == 0 )
return 1;
return i * fac(i - 1);
问题是fac(0)
的结果并不是指你可以写的对象;这就像试图为1
分配一个新值 - 你不能这样做。
fac(0)=1;
是无效的c,你没有像这样为递归赋值。
看起来你想要更接近的东西
if(j==0) {
return 1;
}
fac(i)=i*fac(i-1);
同样,你不能为fac(i)
赋值,因为它是一个函数调用。
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));
}