- Если
X
больше Y
, вернуть X-Y
(очевидно) - Если
Y
больше X
, вернуть Y-X
(также очевидно) - Если
X
и Y
равны равны , что, по вашему мнению, должно быть возвращено?
Если они равны, то X-Y
и Y-X
равны 0
, так что это не имеет значения, не так ли?
Ваше последнее предложение может быть написано любым из:
return x-y;
return y-x;
return 0;
Поскольку эти два значения равны, они ВСЕ оценятся в 0
.
Важной частью является обеспечение сохранения контракта функции..
Согласно комментариям, функция утверждает, что вернет разницу между двумя значениями.Таким образом, он должен возвращать разницу во всех случаях , независимо от того, является ли большее значение X, Y или они равны.
Название вашей функции вводит в заблуждение,Поскольку он называется min
, это означает, что он вернет значение минимум , а не разницу.Вы должны изменить имя функции на что-то вроде diff
или delta
для ясности.
В конечном счете, более простой способ написать функцию:
// compute largest - smallest
int diff(int x, int y)
{
if (x > y)
return x - y; // Handles X is bigger than Y
else
return y - x; // Handles Y bigger than X, *or* X and Y are the same.
}
Наконец, несколько очень коротких версий, которые я бы рассмотрел лучше.
int diff(int x, int y) { return x>y? x-y:y-x; }
int diff(int x, int y) { return abs(x-y); }