По значению дает набор цифр :
int recursiveMinimum(vector<int>array)
{
static int min = INT_MAX, count = 0;
if (count < array.size())
{
if (array[count] <= min)
min = array[count];
count++;
recursiveMinimum(array);
}
else
return min;
}
По указателю дает правильный ответ:
int recursiveMinimum(vector<int>&array)
{
static int min = INT_MAX, count = 0;
if (count < array.size())
{
if (array[count] <= min)
min = array[count];
count++;
recursiveMinimum(array);
}
else
return min;
}
У вас отсутствует return
в первой ветке if
. Ваша функция ничего не возвращает ни из одного уровня рекурсии, кроме самого нижнего. Поведение не определено в обоих вариантах, т.е. ваше возвращенное на самый верх значение - это просто мусор.
А то, что этот мусор случайно совпадает с правильным ответом во втором варианте - известный феномен, заключающийся в том, что при отсутствующем return
иногда получается так, что из наивно странслированного кода (без оптимизаций и т.п.) "как бы возвращается" последнее вычисленное значение (например, регистр eax
для значения типа int
на платформе x86), если оно не будет затерто другим кодом при выходе из функции.
При передаче по значению при выходе из функции будет вызываться деструктор array
, который с большой долей вероятности затрет содержимое eax
, в результате чего из функции будет "возвращен" совсем посторонний мусор. При передаче по ссылке при выходе из функции ничего не делается и последнее значение eax
сохраняется в нетронутом виде. Из-за этого создается иллюзия того, что второй вариант "работает правильно".
Разумеется, любой чих в организации кода или в настройках компилятора будет убивать эту случайную "работоспособность" вашего второго варианта.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Необходимо реализовать управление спящим режимом пк на c++, у меня вообще нет идей как это реализовать(я только начал изучение с++)
У меня есть вопрос, касающийся инициализации атомарных объектов