• Non ci sono risultati.

Metodi ricorsivi

N/A
N/A
Protected

Academic year: 2021

Condividi "Metodi ricorsivi"

Copied!
3
0
0

Testo completo

(1)

Metodi ricorsivi

1. Scrivere un metodo ricorsivo che, dati un carattere c ed una stringa s, restituisce true se c occorre in s, false altrimenti.

public static boolean occorreCarRic (char c, String s) { return occorreCarRic(c,s,0);

}

public static boolean occorreCarRic (char c, String s, int i) { if (i == s.length())

return false;

if (s.charAt(i) == c) return true;

return occorreCarRic(c,s,i+1);

}

2. Scrivere un metodo ricorsivo che, dati un carattere c ed una stringa s, restituisce il numero delle occorrenze di c in s.

Soluzione con ricorsione annidata

public static int occorrenzeCarRic (char c, String s) { return occorrenzeCarRic(c,s,0);

}

public static int occorrenzeCarRic (char c, String s, int i) { if (i == s.length())

return 0;

if (s.charAt(i) == c)

return 1 + occorrenzeCarRic(c,s,i+1);

return occorrenzeCarRic(c,s,i+1);

}

Soluzione con ricorsione in testa

public static int occorrenzeCarRic (char c, String s) { return occorrenzeCarRic(c,s,0,0);

}

public static int occorrenzeCarRic (char c, String s, int i, int k) { if (i == s.length())

return k;

if (s.charAt(i) == c)

return occorrenzeCarRic(c,s,i+1,k+1);

return occorrenzeCarRic(c,s,i+1,k);

}

3. Scrivere un metodo ricorsivo che, dati un carattere c ed una stringa s, restituisce la posizione della prima occorrenza di c in s, e -1 se c non occorre in s.

1

(2)

public static int posizioneCarRic (char c, String s) { return posizioneCarRic(c,s,0);

}

public static int posizioneCarRic (char c, String s, int i) { if (i == s.length())

return -1;

if (s.charAt(i) == c) return i;

return posizioneCarRic(c,s,i+1);

}

4. (Esame scritto del 10/12/2001, una versione dell’Esercizio 5 .)

Scrivere un metodo ricorsivo in linguaggio Java che, dato un array di interi, ne resti- tuisca il valore minimo.

Presentiamo due soluzioni. Nella prima si utilizza il metodo min della classe Math (che restituisce il minimo di due numeri dati in ingresso) e la chiamata ricorsiva del metodo risulta annidata. Nella seconda soluzione il metodo ricorsivo necessita un parametro in pi´u per tenere il valore del minimo corrente, mentre la chiamata ricorsiva del metodo

`e in testa.

Soluzione 1 :

public static int minimo(int[] a) { return minimo(a,0);

}

public static int minimo(int[] a, int i) { if (i == a.length-1)

return a[i];

return Math.min(a[i],minimo(a,i+1));

}

Soluzione 2 :

public static int minimo (int[] a) { return minimo(a,1,a[0]);

}

public static int minimo (int[] a, int i, int min) { if (i == a.length)

return min;

if (a[i] < min)

return minimo(a,i+1,a[i]);

return minimo(a,i+1,min);

}

Esercizio

Scrivere un metodo ricorsivo che, dato un array di interi a, restituisce il valore massimo in a.

2

(3)

5. Scrivere un metodo ricorsivo che, dato un array a di interi, restituisce la somma degli elementi di a.

public static int sommatoria (int[] a) { return sommatoria(a,0,0);

}

public static int sommatoria (int[] a, int i, int sum) { if (i == a.length)

return sum;

return sommatoria(a,i+1,sum+a[i]);

}

Esercizio

Scrivere un metodo ricorsivo che, dato un array di interi a, restituisce il prodotto degli elementi di a.

6. Scrivere un metodo ricorsivo che, dato un array bidimensionale a di interi, restituisce la somma degli elementi di a.

public static int sommatoria (int[][] a) { return sommatoria(a,0,0,0);

}

public static int sommatoria (int[][] a, int i, int j, int sum) { if (i == a.length)

return sum;

if (j == a[i].length)

return sommatoria(a,i+1,0,sum);

return sommatoria(a,i,j+1,sum+a[i][j]);

}

3

Riferimenti

Documenti correlati

La presentazione della tesi di un laureando davanti ad una commissione di laurea pu`o essere descritta tramite il nome e la matricola del laureando, il titolo della tesi, il nome

La sessione di una conferenza pu`o essere caratterizzata dal nome della con- ferenza, dal numero di sessione, dal nome del coordinatore della sessione e dall’elenco delle

Scrivere una nuova classe Corso, dove ciascun corso `e caratterizzato da nome del corso, nome del docente titolare del corso, numero di crediti associati al corso, settore

Le variabili istanza sono il veicolo assicurato, identificato dalla targa (ad esempio, “CA 075 DS”), ed il valore assicurato RC.. Una polizza auto incendio e furto si differenzia da

A differenza dei metodi di- retti (come ad esempio il metodo LU), in genere un metodo iterativo stazionario convergente calcola usualmente solo un approssimazione della soluzione x

Una volta trovata una tale matrice A simmetrica e definita positiva, si modifichi il file demo algebra lineare cos`ı da confrontare su un test il metodo di Jacobi, Gauss-Seidel,

Applicare i rispettivi metodi di Richardson ottimali e osservare sia i (possibili) miglioramenti in termini di errore dopo un numero prefissato di iterazioni sia il miglior

Possiamo trarre conclusioni molto simili a quelle tratte per il metodo di Kansa: la scelta migliore (per quanto riguarda errore e condizio- namento) è quella di