public static int ricercaTernaria(int a[],int obiettivo,int primo,int ultimo){
int risultato;
if(primo>ultimo)
risultato=-1;
int med = (primo + ultimo) / 2;
if (obiettivo == a[med])
risultato= med;
else if (obiettivo > a[med])
risultato=ricercaTernaria(a, obiettivo, med+1, ultimo);
else
risultato= ricercaTernaria(a, obiettivo, primo, med-1);
}
return risultato;
}
Nel caso di una ricerca binaria ricorsiva normale ho capito, almeno credo, che l'algoritmo si ferma in due casi o quando trova l'elemento nell'array
if (obiettivo == a[med])
risultato= med;
oppure quando non trova l'elemento e l'indice primo, nel mio caso è maggiore di ultimo.
if(primo>ultimo)
risultato=-1;
e mi è chiaro anche del perchè aggiorni media facendo
int med = (primo + ultimo) / 2;
"sfoglia " gli elementi dell'array come se fosse un dizionario, dove non sono presenti li scarta ricorsivamente fino ad incorrere in una delle due situazioni sopra. Le mie domande sono, sul codice che vi sto scrivendo di seguito, che assegnazione devo fare e quindi come aggiornare le variabili "parte1" e "parte2" ad ogni ricorsione in modo che come nella ricerca binaria non mi diano indici che escano dall'array e se "primo", con le giuste correzioni sarà mai maggiore di ultimo per far si che il programma restituisca -1, quando l'emento non c'è nell'array!
public static int ricercaTernaria(int a[],int obiettivo,int primo,int ultimo){
int risultato;
if(primo>ultimo)
risultato=-1;
else{
int parte1= ultimo/3; //so che è uguale al codice che ho scritto prima, ma sto impazzendo
int parte2=parte1*2;
if(obiettivo==a[parte1])
risultato = parte1;
else if(obiettivo==a[parte2])
risultato=parte2;
else if (obiettivo < a[parte1])
risultato= ricercaTernaria(a, obiettivo, primo, parte1-1);
else if(obiettivo>a[parte1] && obiettivo<a[parte2])
risultato= ricercaTernaria(a, obiettivo, parte1+1, parte2-1);
else
risultato= ricercaTernaria(a, obiettivo, parte2+1, ultimo);
}
return risultato;
Grazie ancora di tutto! So che sono una testa di rame!