PDA

View Full Version : [JAVA] Aiuto riguardo ricorsione e metodi ricorsivi


Luca07
06-02-2012, 15:55
Salve a tutti, sto studiando java all'università, ma sono incappato nel capitolo della ricorsione e non riesco ad andare avanti.
Ho capito come funziona (gli esempi del fattoriale e della serie di fibonacci) ma facendo gli esercizi mi blocco.
Questo è l'esercizio che ho svolto, ma non mi è chiaro l'uso del metodo ricorsivo recursivelyfindMin

//********* metodo statico ausiliario RICORSIVO per trovare il valore minimo nell'array ********************

public static int recursivelyfindMin(int[] v, int vSize)
{
if (v == null || v.length < 1 || vSize < 1)
throw new IllegalArgumentException("Errore: array vuoto o non valido!");

if (vSize == 1)
return v[0]; // caso BASE

int subMin = recursivelyfindMin(v, vSize - 1); // passo ricorsivo

if (v[vSize-1] < subMin)
{
return v[vSize-1];
}

else // significa che subMin < v[vSize-1]
{
return subMin;
}
}

qualcuno mi aiuterebbe?

PGI-Bis
06-02-2012, 17:02
Fai i passaggi a mano.

a = [9, 3, 5]

rfm(a, 3)
--submin = rfm(a, 2)
---submin = frm(a, 1)
----= a[0] = 9
---a[2-1] < 9 ? Sì , = 3
--a[3-1] < 3 ? No = 3
= 3

Vale a dire che prende il primo numero nell'array e lo mette in subMin, poi confronta subMin col secondo e prende il minore dei due, poi confronta questo col terzo e prende il minore dei due. Eccetera.

Comunque è un caso meraviglioso di ricorsione perchè di solito in un metodo riscorsivo non ci si capisce una mazza ma essendo più corto dell'iterativo si dice "eh, be', che eleganza". In questo caso è pure lungo quindi emerge proprio la luridità della ricorsione, come aprire le finestre in una mattina di campagna e respirare a pieni polmoni quella zaffata di letame che non te la togli più dal naso fino alle cinque del pomeriggio.

Ecco, quella è la ricorsione.

Luca07
07-02-2012, 10:51
Fenomenale. Davvero, spiegazione chiarissima (commenti compresi! ahah) e finalmente ho capito anche come provare a risolvere le ricorsioni a mano!
Grazie mille :)