L'esempio più semplice per lo studio della ricorsione è quello del fattoriale.
public 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);
}
}
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 ricorsione .
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.