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
Vediamo di codificarlo in Java:codice:Fattoriale(0) = 1 Fattoriale (X) = X * Fattoriale(X - 1)
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:int fattoriale(int x) { int risultato = 0; if (x == 0) { // caso base risultato = 1; } else { // caso ricorsivo risultato = x * fattoriale(x-1); } return risultato; }
Vediamolo in Java:codice:Fibonacci(0) = 1 Fibonacci(1) = 1 Fibonacci(X) = Fibonacci(x-1) + Fibonacci(x-2);
Ci sono poi casi di risorsione nella ricorsione... è il caso della funzione di Ackermancodice: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; }
In Java:codice:Ack(0, n) = n + 1 Ack(m+1, 0) = Ack(m, 1) Ack(m+1, n+1) = Ack(m, Ack(m+1, n))
Ciao.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)); } } }![]()



