2
respostas

fiz uma própria implemetanção minha

esta tudo funcionando perfeitamente no depurador, o problema q na hora de ele dar o retorno no numero q eu chutei "precopedido" dps q ja achou, ele da o retorno, mas por algum motivo esse valor não é atributo a variavel a qual recebe como valor o resultado da função buscapreco, alguem sabe o motivo?

const livros = require('./arrayOrdenado');
let precochutado = buscapreco(livros,50);



function buscapreco(array, precopedido) {
    let pivo = Math.floor(array.length/2);
    if(pivo > 0){
    if(array[pivo].preco > precopedido ) {
    buscapreco(array.slice(0, pivo), precopedido);
    }else if(array[pivo].preco < precopedido){
    buscapreco(array.slice(pivo), precopedido);
    }
    if(array[pivo].preco == precopedido){
        return array[pivo];
    }
}else{
    return 'numero nao existe';
}
}



console.log(precochutado) ;
2 respostas

Descobri, mas ainda assim tenho uma duvida, o erro esta na recursao da função buscapreco, era necessário dar retorno nela tb, mas por que? Tipo, se o unico valor em que eu quero usar da função é o preço q a pessoa querer buscar que vai vir justamente da parte if(array[pivo].preco == precopedido){ return array[pivo]; por que é necessario dar retorno tb na recursao?

codigo corrigido

const livros = require('./arrayOrdenado');
/*
var precochutado = buscapreco(livros,50);
*/


function buscapreco(array, precopedido) {
    let resultado = undefined;
    let pivo = Math.floor(array.length/2);
    if(pivo > 0){
    if(array[pivo].preco > precopedido ) {
    return buscapreco(array.slice(0, pivo - 1), precopedido);
    }else if(array[pivo].preco < precopedido){
    return buscapreco(array.slice(pivo + 1), precopedido);
    }
    if(array[pivo].preco == precopedido){
        resultado = array[pivo];
        return resultado;

    }
}else{
    if(array[pivo].preco == precopedido){
        resultado = array[pivo];
        return resultado;
    }else{
    resultado = 'preço nao existe na lista de livros';
    return resultado;
    }
}
}
console.log(buscapreco(livros, 13)) ;