La Ricorsione si attua quando una funzione richiama se stessa per produrre il risultato. La chiamata avviene passando dei parametri "più semplici", in modo da raggiungere il caso base, che rappresenta il caso più semplice in assoluto.

Facciamo un esempio classico, il calcolo del fattoriale: in matematica il fattoriale è definito ricorsivamente come segue
codice:
Fattoriale(0) = 1
Fattoriale (X) = X * Fattoriale(X - 1)
Vediamo di codificarlo in Java:
codice:
int fattoriale(int x) {
   int risultato = 0;
   if (x == 0) {   // caso base
      risultato = 1;
   } else {   // caso ricorsivo
      risultato = x * fattoriale(x-1);
   }
   return risultato;
}
La ricorsione, però, può non essere sempre singola... può capitare il caso di una doppia ricorsione. E' il caso del calcolo della serie di fibonacci, definita come segue (in una delle 2 varianti)
codice:
Fibonacci(0) = 1
Fibonacci(1) = 1
Fibonacci(X) = Fibonacci(x-1) + Fibonacci(x-2);
Vediamolo in Java:
codice:
int fibonacci(int x) {
   int risultato = 0;
   if ((x == 0) || (x == 1)) {   // casi base
      risultato = 1;
   } else {   // caso ricorsivo
      risultato = fibonacci(x-1) + fibonacci(x-2);
   }
   return risultato;
}
Ci sono poi casi di risorsione nella ricorsione... è il caso della funzione di Ackerman
codice:
Ack(0, n) = n + 1 
Ack(m+1, 0) = Ack(m, 1) 
Ack(m+1, n+1) = Ack(m, Ack(m+1, n))
In Java:
codice:
int Ack(int x, int y) {
   int risultato = 0;
   if (x == 0) {   // caso base
      risultato = y + 1;
   } else {   
      if (y == 0) {   // 1° caso ricorsivo
         risultato = Ack(x-1, 1);
      } else {  // 2° caso ricorsivo
         risultato = Ack(x-1, Ack(x, y-1));
      }
   }
}
Ciao.