По значению дает набор цифр :
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
сохраняется в нетронутом виде. Из-за этого создается иллюзия того, что второй вариант "работает правильно".
Разумеется, любой чих в организации кода или в настройках компилятора будет убивать эту случайную "работоспособность" вашего второго варианта.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Необходимо реализовать управление спящим режимом пк на c++, у меня вообще нет идей как это реализовать(я только начал изучение с++)
У меня есть вопрос, касающийся инициализации атомарных объектов