Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Não consigo fazer funcionar

Não consigo fazer funcionar

const listaLivros = require('./arrayOrdenado')/

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--, valorBuscado);
    }

    if(valorBuscado > atual.preco) {
        return busca (array, meio++, ate, valorBuscado)
    }
}

console.log (busca (listaLivros, 0, listaLivros.length -1, 40 ))
2 respostas

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!

solução!

Na verdade eu tinha feito assim, mas continua nas duas versões dando esse erro:

PS C:\Users\Marllon\Desktop\ESTUDO\JS Aula\AULAS\arquivos-base\aula-4> node busca.js C:\Users\Marllon\Desktop\ESTUDO\JS Aula\AULAS\arquivos-base\aula-4\busca.js:20 console.log (busca (listaLivros, 0, listaLivros.length -1, 40 )) ^

ReferenceError: busca is not defined at Object. (C:\Users\Marllon\Desktop\ESTUDO\JS Aula\AULAS\arquivos-base\aula-4\busca.js:20:9) at Module._compile (node:internal/modules/cjs/loader:1376:14) at Module._extensions..js (node:internal/modules/cjs/loader:1435:10) at Module.load (node:internal/modules/cjs/loader:1207:32) at Module._load (node:internal/modules/cjs/loader:1023:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:135:12) at node:internal/main/run_main_module:28:49

no final era só a barra na hora de importar