Esercizio su Array e dicotomia

Messaggioda Michele/96 » 22/04/2017, 15:43

Salve a tutti, sono uno studente di informatica e mi sono recentemente imbattuto in questo esercizio al quale non riesco assolutatmente a trovare una soluzione, di seguito si trovano in ordine testo e mio tentativo, chiedo gentilmente a qualcuno di darvi un occhio e suggerirmi gentilmente una soluzione,
Grazie in anticipo per la risposta.
/** Metodo privato che DEVE ESSERE USATO dalla soluzione all'ESERCIZIO 2. */
private static boolean test(int x) {
return (x % 2 == 0);
}

/**
* ESERCIZIO 2 (Massimo 8 punti -- da consegnare elettronicamente).
*
* Scrivere un metodo exDue che, richiamando un metodo ricorsivo exDueRic, rispetti i requisiti riportati.
* a) exDue DEVE avere un singolo parametro formale di nome a
* e di tipo reference ad un array di interi;
* b) se il riferimento a e' definito allora exDue restituisce il valore intero ottenuto
* dal metodo ricorsivo exDueRic applicato ad a.
* Altrimenti exDue restituisce -1;
* c) exDueRic:
* 1) restituisce il prodotto di tutti gli elementi di a in posizione dispari per i quali
* il metodo test sia vero. Se nessun elemento soddisfa il test, allora exDueRic restituisce 1.
* 2) ad ogni chiamata ricorsiva, exDueRic procede nella visita dell'array a, suddividendolo in due
* parti la cui lunghezza differisca al piu' di una unita'.
*
* La chiamata a exDue non deve generare alcun tipo d'errore, controllando che il riferimento sia definito
* ed evitando, ad esempio, errori del tipo out of bound.
*
* ESEMPI.
* Se b->{10, 2, 5, 4, 2, 1} allora exDue(b) restituisce 8 ottenuto dal prodotto 2*4.


________________________________________MioTentativo__________________________________________________
public static int exDue(int[] a){
if(a!=null){
return exDueRic(a,0,a.length-1);
}
else{
return -1;
}
}
public static int exDueRic(int[] a,int i,int f){

if(i==f){
int prod=1;
for(int j=0;j<a.length;j++){
if(i%2!=0 && test(a[i])==true){
return


}
}
return prod;


}else {

int m=(i+f)/2;
return exDueRic(a,i,m)*exDueRic(a,m+1,f);
}
}
Michele/96
New Member
New Member
 
Messaggio: 13 di 70
Iscritto il: 22/10/2016, 12:24

Re: Esercizio su Array e dicotomia

Messaggioda apatriarca » 22/04/2017, 18:29

Per rendere il codice più leggibile ti consiglio di usare i tag code. In altre parole devi inserire il codice tra [ code ] e [ /code ] (senza gli spazi tra le parentesi quadre e il testo che ho inserito per renderli visibili qui).

Il codice di exDue mi sembra corretto. Quello di exDueRic invece non lo è. Nel codice devi infatti prendere in considerazione soltanto i valori contenuti tra gli indici i e f, mentre tu stai prendendo in considerazione tutti i valori. In questo modo stai calcolando a.length volte il valore finale. Risultato che a questo punto verrebbe moltiplicato per a.length volte.

Siccome le chiamate ricorsive vengono moltiplicate tra loro, l'unica cosa che devi fare nel caso i == j è di restituire il corrispondente valore nell'array se l'indice è pari e il valore rispetta la condizione del test, o 1 in caso contrario..
apatriarca
Moderatore
Moderatore
 
Messaggio: 4609 di 10435
Iscritto il: 08/12/2008, 20:37
Località: Madrid


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite