Любопытно, что делает эта функция

#java #function #return #invariants

#java #функция #Возврат #инварианты

Вопрос:

Может кто-нибудь сказать мне, что делает эта функция? Я просто знаю, что она возвращает сумму x y, но я хочу знать, почему. Спасибо

     public static int f(int x, int y){
    while( y > 0){
        x = x   1;
        y = y - 1;
    }
    return x;
}
 

Комментарии:

1. Пройдите через это шаг за шагом и приложите некоторые усилия для изучения вещей в следующий раз, когда у вас возникнет вопрос.

2. если y <= 0 он просто возвращает x , а не сумму x y

3. эта функция добавляет 1 y раз к x. Итак, он возвращает x y

4. Почему 1 1 равно 2 ? Peano может помочь вам понять.

5. Спасибо за помощь!

Ответ №1:

Есть два случая:

Первый случай: y <= 0
Поскольку цикл while имеет значение false, он просто возвращает x («он пропускает часть»)

Второй случай: y> 0
Поскольку цикл while имеет значение true, он возвращает x y (x количество итераций)

Количество итераций — это значение y, потому что с каждой итерацией y будет уменьшаться на 1, пока y = 0.

Ответ №2:

Цикл начинается со значения y и уменьшает его на каждой итерации, останавливаясь, когда y достигает нуля.

Для каждой из этих итераций к x добавляется 1. Следовательно, для «единицы» y к x добавляется «единица».

Редактировать Как отмечено в комментариях, функция не вернет сумму двух чисел, если y она меньше нуля, поскольку цикл вообще не будет выполняться.

Комментарии:

1. Вы предполагаете, что y это начинается со значения, большего нуля. Как указывает Дмитрий Быченко в своем комментарии, если y начинается со значения, равного нулю или меньшего нуля, то ничего не добавляется x и возвращается исходное значение x .

Ответ №3:

Добавление можно рассматривать как серию приращений. Вот что делает эта функция. Он увеличивает x y время и возвращает результат, который есть x y . Предполагается, что y это натуральное число.

Комментарии:

1. Кто-нибудь может объяснить отрицательные голоса и запрос на удаление? Я этого не понимаю.

2. Я не знаю, я думаю, что ваш ответ также полезен. Я дал вам 1

3. Я проголосовал против, потому что, как объясняли другие комментарии и ответы, метод не всегда возвращает x y , поэтому утверждать, что он возвращает это, неверно. Если вы получаете отрицательные голоса, удалите или измените свой ответ для решения любых подобных проблем. (Конечно, если вы внимательно проверите ответ и решите, что все в порядке, тогда вам следует просто игнорировать отрицательные голоса.)

4. @Bobulous: «… измените свой ответ, чтобы решить любые подобные проблемы». Но это то, что я сделал.

5. Мне все еще не понятно. Метод не предполагает, что y это больше нуля, он выполняет явную проверку, чтобы определить, больше ли оно нуля.