Una tecnica di programmazione è la ricorsione.
La ricorsione in informatica consiste nel costruire una funzione che richiama se stessa in modo ricorsivo.
Per esempio se voglio creare una funzione che fa la somma di due numeri positivi, posso definire la funzione "somma" passandogli come parametri i valori da sommare. in questo modo:
funzione somma (x, y)
{
z=x+y
return z
}
La funzione somma() è una funzione normale molto semplice e non ricorsiva che restituisce la somma di x e di y.
Proviamo a renderla ricorsiva:
La cosa è molto semplice e banale:
funzione somma_ricorsiva (x,y)
{
if y > 0 { somma_ricorsiva (x+1,y-1) }
else return x
}
Cosa ho fatto? Anziché sommare x e y ho usato il parametro y come variabile di controllo per contare quante volte sommare 1 a x richiamando la stessa funzione all'interno di se stessa.
Collaudiamo la nostra funzione.
Proviamo ad eseguire la somma di 10 + 10. Per farlo dobbiamo scrivere la nostra funzione ricorsiva in un linguaggio appropriato e comprensibile dal browser e che sia sintatticamente corretta. Scegliamo Javascript come linguaggio di programmazione script e scriviamola come pagina html in modo che sia testabile dal browser. Il browser deve essere abilitato ad eseguire javascript altrimenti lo script non viene eseguito dal browser. Creiamo un file di testo e chiamiamolo ricorsione.html, apriamolo con notepad e al suo interno scriviamo le seguenti istruzioni:
<html><head></head>
<body>
La somma dei due numeri è uguale a :
<script language="Javascript">
function somma_ricorsiva (x,y)
{
if (y > 0) { somma_ricorsiva (x+1,y-1) }
else return document.write (x);
}
somma_ricorsiva (10,10);
</script>
</body>
</html>
Copiate le istruzione precedenti, salviamo il file ricorsione.html e carichiamolo con il browser preferito. Dovremmo vedere a video il risultato di 10+10 che è 20.
I limiti
La programmazione ricorsiva è una tecnica di programmazione molto potente, ma è pericolosa se non la si riesce a controllare bene. Infatti programmare ricorsivamente comporta forti limitazioni dovute alla quantità di memoria che abbiamo a disposizione del browser per eseguire lo script. Devi sapere che ogni volta che la funzione chiama se stessa, occorre allocare memoria per lo script e nel caso si debba richiamare molte volte in modo ricorsivo la stessa funzione, c'è il rischio di esaurire la memoria a disposizione.
Ad esempio, vedi se riesci a sommare 100000 e 100000. Probabilmente lo script va in errore e non viene eseguito.
Bisogna quindi essere consci, prima di cimentarsi con funzioni ricorsive, di avere abbastanza memoria a disposizione per le nostre necessità facendo un test di memoria in runtime prima di chiamare una funzione ricorsiva e valutare se continuare o fermarsi per evitare di andare in overflow di memoria. Il test di memoria naturalmente rallenta molto lo script ed è quindi a discrezione del programmatore valutare quando farlo in software mission critical o meno.
Ti è piaciuto questo post? Bene, io ti ho dato il la, ora fai le tue prove, modificando e aggiungendo cose nuove alla funzione ricorsiva o provando ad inventarti una tua funzione ricorsiva che faccia qualcosa di utile per l'umanità (ad esempio puoi provare a modificarla in modo che tratti anche numeri negativi), secondo la tua fantasia, documentandoti sul linguaggio Javascript (se non lo conosci) che è molto bello.
Tuttavia non mi stressare con domande sulla programmazione ricorsiva, perché non ho molta voglia e tempo per rispondere.
Comments