错误:“左值必须作为赋值的左操作数”

时间:2019-03-17 18:36:33

标签: c recursion

void main()
{
    int sum=0;
    printf("%d",add(sum));
}

int add(int x)
{
    (x<=100) ? x=x+add(x+1) : x=0;
    return x;
}

在该函数中,我尝试使用递归打印前100个自然数的和。但是,我收到了错误消息“需要左值作为赋值的左操作数”。谁能帮助我解决此错误并解释其背后的概念?

2 个答案:

答案 0 :(得分:0)

由于您始终设置x,因此请将x放在左侧。所以代替

(x<=100) ? x=x+add(x+1) : x=0;

使用

x = (x <= 100) ? x + add(x + 1) : 0;

或者,由于您将立即返回它,因此您可能会立即将其返回:

return (x <= 100) ? x + add(x + 1) : 0;

该表达式中的()也是不必要的:

x = x <= 100 ? x + add(x + 1) : 0;
// or
return x <= 100 ? x + add(x + 1) : 0;

答案 1 :(得分:0)

使用尾部递归,您可以这样做。

免责声明可能会出现一些语法错误,因为我不是C家伙,但想法不是等待返回值来计算结果

int add(int ans ,int num){
if(num == 100)
return ans 
add(ans+num, num+1)
}

void main()
{
    int sum=0;
    printf("%d",add(sum, 0));
}