左值作为赋值的左操作数

问题描述 投票:-4回答:3

在编译时我得到错误错误:左值作为赋值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 recursion factorial
3个回答
2
投票

在C中,您不会以这种方式返回函数值;相反,你会写类似的东西

 if ( i == 1 || i == 0 )
   return 1;

 return i * fac(i - 1);

问题是fac(0)的结果并不是指你可以写的对象;这就像试图为1分配一个新值 - 你不能这样做。


0
投票
fac(0)=1;

是无效的c,你没有像这样为递归赋值。

看起来你想要更接近的东西

if(j==0) {
  return 1;
}


fac(i)=i*fac(i-1);

同样,你不能为fac(i)赋值,因为它是一个函数调用。


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));
}
© www.soinside.com 2019 - 2024. All rights reserved.