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个自然数的和。但是,我收到了错误消息“需要左值作为赋值的左操作数”。谁能帮助我解决此错误并解释其背后的概念?
答案 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));
}