Почему я не могу установить значение переменной за пределами JavaScript при l oop? - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь выполнить бинарный вызов, и он требует установки промежуточной точки между началом и концом массива.

Это код:

function binary (val, nums) {
  var start = nums[0];
  var end = nums.length -1;
  var found = false;
  var mid = Math.floor((start + end)/2);
  var position = -1;

  while(!found && start <= end) {
    if (nums[mid] === val) {
        found = true;
        position = mid;  
    }
    else if (nums[mid] > val) {
       end = mid -1;

    }
    else {
        start = mid + 1;
    }
  }
return position;
}

console.log(binarySearch(12, [1,2,3,4,5,6,7,12]))

Консоль ничего не возвращает, но функция не останавливается. Однако, если я объявляю var mid за пределами l oop, а затем устанавливаю значение в l oop примерно так:

var mid;

while(!found && start <= end) {
    mid = Math.floor((start+end)/2)
    if (nums[mid] === val) {
        found = true;
        position = mid;  
    }
    else if (nums[mid] > val) {
       end = mid -1;

    }
    else {
        start = mid + 1;
    }
}

Возвращается правильное значение. Почему это?

1 Ответ

1 голос
/ 06 марта 2020

В первом фрагменте кода (снаружи пока l oop) вы никогда не меняете среднее значение, тогда как, как и во втором фрагменте кода, вы обновляете середину в каждой итерации на основе начальных и конечных значений и, следовательно, разницы в результате.

...