Olá, Marllon! Tudo bem?
Parece que o problema está na forma como você está incrementando e decrementando as variáveis "meio" na chamada recursiva da função "busca". No seu código, você está utilizando o operador de pós-incremento (meio++) e o operador de pós-decremento (meio--). Isso significa que o valor de "meio" só será alterado após a execução da linha, o que pode estar causando um comportamento inesperado.
A solução para isso seria simplesmente subtrair ou adicionar 1 diretamente ao meio, sem usar os operadores de incremento e decremento. Veja como ficaria:
function busca(array, de, ate, valorBuscado) {
const meio = Math.floor ((de + ate) / 2);
const atual = array[meio];
if(valorBuscado === atual.preco) {
return meio;
}
if(valorBuscado < atual.preco){
return busca (array, de, meio - 1, valorBuscado);
}
if(valorBuscado > atual.preco) {
return busca (array, meio + 1, ate, valorBuscado)
}
}
console.log (busca (listaLivros, 0, listaLivros.length -1, 40 ))
Dessa forma, a função "busca" irá corretamente alterar o intervalo de busca a cada chamada recursiva, evitando entrar em um loop infinito.
Espero ter ajudado e bons estudos!