Почему -Infinity - это база для сравнения чисел, чтобы вернуть max? - PullRequest
1 голос
/ 18 апреля 2019

В этом коде я не могу понять, почему -Infinity ведет себя как база, поэтому по сравнению с ней возвращает наибольшее число из массива чисел.

function max(...numbers) {
   let result = -Infinity;
   for (let number of numbers) {
     if (number > result) result = number;
   }
   return result;
}

1 Ответ

2 голосов
/ 18 апреля 2019

Поначалу сбивает с толку, и, вероятно, на ваш взгляд, решение будет звучать так:

 let result = 0;

Проблема в том, что когда мы хотим найти значение MAXIMUM массива, нам нужно сравнить каждый элемент друг с другом. Это больше похоже на «привычку», что мы устанавливаем МАКСИМУМ на -INFINITY. Это просто означает, что самый большой элемент на данный момент - это минимально возможное число, которое мы можем выразить. Имеет ли это смысл? Мы просто предполагаем, что самое большое число, которое мы найдем, это -Infinity. Затем мы сравниваем элементы из массива с этим базовым числом (в нашем случае -Infinity) и, если мы были ложными (и, вероятно, мы были), то мы заменяем -Infinity на следующее число, которое больше нашего текущего значения. Мы делаем это для всего диапазона чисел, и так мы находим элемент Maximum.

Вы можете выбрать несколько элементов в качестве отправной точки, но никогда не выбирайте число, введенное вами самостоятельно (вы должны делать это ТОЛЬКО, если об этом попросит упражнение). Если бы вы выбрали, например:

let result = 0;

тогда у вас может быть проблема. Может быть, все числа отрицательны, например [-3, -13, -5,13, ​​-99], но вы уже установили наибольшее число равным 0, поэтому каждое сравнение будет неправильным и бесполезным.

Итак, имейте в виду, что в этом случае рекомендуется установить базовое значение на -Infinity или, если вы хотите применить другой подход, установить базовое значение для первого элемента в массиве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...