Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C] ricerca binaria su vettore [con ricorsione]

    ciao ragazzi.. sono novello di C e mi sto un po' ncasinando perchè devo recuperare assolutamente un esame che in un cambio di facoltà non mi è stato riconosciuto... e quindi mi trovo all'improvviso alle prese con C senza averne mai approfondito le conoscenze.... vi chiederò spesso soccorso temo

    Il problema è questo:

    in una esercitazione il prof ha scritto una cosa del genere [se ho preso bene appunti] come funzione ricorsiva per la ricerca binaria in un vettore... i parametri sono appunto il puntatore ad un vettore, la dimensione dello stesso, l'elemento da cercare...

    int find(int* v, int dim, int elem)
    {
    if (elem == 0) return 0;
    if (dim == 1) return v[0]==elem;
    if (v[dim/2] == elem) return 1;
    if (v[dim/2]>elem) find(v,dim/2,elem);
    return find(&v[dim/2+1],dim/2,elem);

    }


    l'ho richiamata con questo main:
    int main()
    {
    int v[] = {1,2,3,4,5,6,7,8,9};
    int dim = 9;
    int elem = 3;
    int ris;

    ris = find(v,dim,elem);
    if (ris != 0) puts("elemento trovato!");
    else puts("elemento NON trovato!");
    system("PAUSE");
    }

    e in pratica mi trova l'elemento solo quando questo ècorrisponde al primo confronto.. quindi sicuramente c0'è un problema nelle chiamate ricorsive... di dicuro è qualche impiccio coi puntatori.. spero mi diate una mano

    il problema dovrebbe stare qui:
    if (v[dim/2]>elem) find(v,dim/2,elem);
    return find(&v[dim/2+1],dim/2,elem);

    nel primo caso dovrei fare la chiamata ricorsiva passando lo stesso puntatore [al primo elemento] ma con dimensione dimezzata per escludere la ricerca nella seconda parte...

    nel secondo caso dovrei invece passare il puntatore al primo elemento della seconda metà... cosa sbaglio?
    ah.. sarebbe codice scritto dal prof in aula.. per questo mi stranisco
    magarri ho preso male appunti.. boh

    tnx

  2. #2
    Hai dimenticato di copiare un return.

    codice:
    int find(int* v, int dim, int elem) 
    { 
    	if (elem == 0) return 0; 
    	if (dim == 1) return v[0]==elem; 
    	if (v[dim/2] == elem) return 1; 
    	if (v[dim/2]>elem) return find(v,dim/2,elem); 
    	return find(&v[dim/2+1],dim/2,elem); 
    
    }

  3. #3
    oddio era proprio una fagianata

    grazie, provo per sicurezza ma ora dovrebbe andare

    il bello che non solo non l'ho copiato.. ma rifacendo l'esercizio a casa senza guardare gli appunti.. l'ho omesso anche lì

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.