L'esempio più semplice per lo studio della ricorsione è quello del fattoriale.
Ricorsione significa semplicemente richiamare una funzione all'interno della definizione della funzione stessa fino a quando non si verifica una condizione tale che il metodo non sia più ricorsivo , ma cominci il percorso a ritroso , arrivando a fornire il risultato richiesto.Può succedere però che nel percorso a ritroso , ci si ritrovi nella situazione di dover ricominciare la ricorsionepublic class Fattoriale{
public static void main(String []Args){
System.out.println("Calcolo del fattoriale");
for(;{
int n=Console.readInt("N>");
System.out.println("IL fattoriale di "+n+ " e' : " +fattoriale(n) );
System.out.println();
}
}
static long fattoriale(int m){
//Il metodo ricorsivo si ferma non appena
// m==0 e comincia a restituire all'istanza che lo ha
//invocato il valore ottenuto , la quale lo restituirà alla
// precedente e così via , fino alla prima istanziazione
// (penso si dica così) che restituirà il risultato.
if(m==0) return 1;
return m*fattoriale(m-1);
}
}.
Si può anche descrivere come un modo che permette di partire da problemi grossi e complessi e piano piano renderli sempre più facili e leggeri fino ad arrivare al punto minimo di semplicità(sempre che esista) e ritornare indietro.
Esistono due tipi di ricorsione , La Ricorsione Diretta e
la Ricorsione Indiretta .
La ricorsione diretta è detta tale quando una funzione richiama se stessa, indiretta quando un funzione richiama un'akltra funzione che a sua volta richiama la prima.
Se tu avessi dovuto calcolare il fattoriale di un numero m, avresti dovuto creare una lista di numeri da 1 a m e poi fare la moltiplicazione. Mentre con la ricorsione risparmi un sacco di righe di codice.
C'è da dire però che la ricorsione consuma molta memoria , perchè istanzia un numero n di volte la stessa classe ed ogni istanziazione resta attiva finchè non viene ritornato il valore richesto alla suceessiva istaza.![]()
Da notare che ogni volta che si fa una invocazione, viene creato un nuovo record di attivazione e le variabili sono diverse.


{

Rispondi quotando