Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Pulse

Busca com recursividade

Recommended Posts

Busca sequencial em um veto desordenado que retorna a posição da primeira ocorrência de um elemento procurado usando uma estratégia similar a da busca binaria.

Dica: Se não é o elemento do meio, procure dos dois lados e retorne o menor dos índices encontrados. Se for o elemento do meio, continue a busca apenas do lado esquerdo, retornando a posição de lá se encontrar e o meio senão encontrar

#include <stdio.h>

int busca(int vetor[], int n, int posi, int inicio, int fim)
{
    posi = (inicio+fim)/2;

    if(vetor[posi] == n)
    {
        return busca(vetor, n, posi, inicio, posi);
    }
    else
    {
        return busca(vetor, n, posi, posi, fim);
    }
}

int main ()
{
    int vetor={5,6,8,9}, n, inicio=0, fim=4, posi;

    scanf("%d", &n);

    printf("%d", busca(vetor, n, posi, inicio, fim));
}

Isso foi o máximo que eu consegui fazer nas minhas tentativas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse enunciado está estranho. Primeiro fala de busca sequencial e depois de estratégia de busca binária (que necessita de um array ordenado)....

O argumento posi é passado por valor, vc não está alterando nada com aquela atribuição.
O array está declarado incorretamente.

 

 

Dica: Se não é o elemento do meio, procure dos dois lados e retorne o menor dos índices encontrados. Se for o elemento do meio, continue a busca apenas do lado esquerdo, retornando a posição de lá se encontrar e o meio senão encontrar

Se eu não encontrar o elemento, tenho que retornar uma posição que corresponde ao meio do array? Isso não faz sentido. Como diferenciar o elemento não encontrado de um encontrado exatamente no meio do array?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.