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![]()