Muito bom post rei, eu também vi busca binária pelo livro do Aditya e no primeiro cap ele ainda não fala de recursividade, mas no 4 ele cita, então eu fiz uma implementação da busca binária, usando recursividade:
const arr = [1,3,8,14,25,29,36,42, 52];
function binarySearch(arr, left, right, value) {
if(left > right ) {
console.debug(arr)
return -1
}
let m = Math.round((left + right) / 2)
if(arr[m] == value){
return `index: ${m} value ${arr[m]}`
}
if(arr[m] < value) {
return binarySearch(arr, m + 1, right, value)
}else {
return binarySearch(arr, left, m -1, value)
}
}
console.debug(binarySearch(arr,0, arr.length -1, 42))
Uma coisa legal que vale destacar, é que quando tentei a primeira vez, estava separando o array, e isso faz você perder o index original do item no array, então a sacada do
if (chute > item) { alto = meio - 1; } else { baixo = meio + 1; }
onde apenas apontamos um novo meio de pesquisa e não fazemos nenhum tipo de alteração no array original é muito boa, e um dos segredos pro algoritmo funcionar corretamente.