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);
}
}