左值作为赋值的左操作数

时间:2016-07-15 15:41:14

标签: c recursion factorial

在编译时我遇到了错误 错误:作为赋值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);
    }


}

3 个答案:

答案 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));
}