Как указано в комментариях, ваш массив должен быть упорядочен для того, чтобы бинарный поиск работал, подумайте о шагах для предоставленного вами массива ([28, 91, 30, 33, 2, 7, 88, 90, 70, 44, 40, 41]
)
, на первом шаге он предпримет значение в середине массива (7
), которое будет меньше, чем значение, которое вы смотрите (91
), затем оно уменьшит ваш массив до ([88, 90, 70, 44, 40, 41]
), а затем вы можете заметить, почему ваш элемент не найден .
использование sort
перед вашим массивом решает проблему:)
5 7 8 70 10 40 11 41 элемент не найден в arr
let recursionFunction = function (arr, x, start, end) {
if (start > end) {
return false
}
let mid = Math.floor((start + end)/2)
console.log(mid, arr[mid])
if (arr[mid] == x) {
return true
}
if (arr[mid] > x) {
return recursionFunction(arr, x, start, mid-1)
} else {
return recursionFunction(arr, x, mid+1, end)
}
}
let x = 91
// with sort, it will work.
let arr = [28, 91, 30, 33, 2, 7, 88, 90, 70, 44, 40, 41].sort();
if (recursionFunction(arr, x, 0, arr.length-1)) {
console.log("element is found in arr")
} else {
console.log('element is not found in arr')
}