Ошибка: «lvalue требуется как левый операнд присваивания» - PullRequest
0 голосов
/ 17 марта 2019
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 натуральных чисел, используя рекурсию. Но я получаю ошибку как «lvalue требуется как левый операнд присваивания». Может кто-нибудь помочь мне решить эту ошибку и объяснить концепцию, стоящую за ней?

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

Используя хвостовую рекурсию, вы можете сделать это следующим образом.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ может иметь некоторую синтаксическую ошибку, потому что я не парень 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));
}
0 голосов
/ 17 марта 2019

Поскольку вы всегда устанавливаете 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...