Я писал рекурсивную функцию и столкнулся с проблемой в операторе return.Тернарный оператор внутри оператора возврата
int SumOfEvenNumbers(int v[], int i)
{
if (i > v[0])
return 0;
return SumOfEvenNumbers(v, i+1) + (v[i]%2==0)?v[i]:0;
}
Функция вызывается так:
SumOfEvenNumbers(vector_indexed_from_1, 1);
//v[0] is equal to the number of elements, excluding itself
Что я ожидал троичной если вернуться было либо v [я] или 0 (в случае, если это даже), но, видимо, после распечатки результата каждого троичной, если на экране, только значения, которые являются результатом выражения равны 1 и 0.
int SumOfEvenNumbers(int v[], int i)
{
if (i > v[0])
return 0;
cout << (v[i]%2==0)?(v[i]):(0); // either a 1 or a 0
return SumOfEvenNumbers(v, i+1) + (v[i]%2==0)?v[i]:0;
}
как я фиксированной это путем инициализации переменной с результатом выражения и последующего добавления т hat к возвращаемому значению.
int SumOfEvenNumbers(int v[], int i)
{
if (i > v[0])
return 0;
int rv = (v[i]%2==0)?(v[i]):(0);
return SumOfEvenNumbers(v, i+1) + rv;
}
Может ли кто-нибудь объяснить, что происходит? Можно ли избежать объявления переменной, чтобы получить правильный результат?
Это очень запутанно. Напишите простую функцию «main», которая вызывает «SumOfEvenNumbers» с образцами, которые показывают проблему, а затем объясните, какой результат вы ожидаете, и что вы получили. –
[MCVE] пожалуйста. Нужно только взять еще дюжину строк, чтобы составить полный, компилирующий набор исходных кодов, который фактически продемонстрирует вашу проблему с поведением, которое вы не можете объяснить. – Yakk