La ricorsione
Siamo finalmente giunti alla ricorsione. Croce e delizia del popolo dei programmatori. Per alcuni di voi sarà uno strumento utilissimo di cui non potrete fare a meno, per gli altri sarà l'incubo che li sveglierà durante la notte.
Cominciamo col dare una definizione. Cosa si intende in generale per ricorsione?
Per ricorsione si intende quel meccanismo tramite il quale un qualcosa, in genere funzioni o entità matematiche, è espresso in termini di sé stessa.
Quindi un concetto ricorsivo è qualcosa che è definito su se stesso.
Lo sono molte funzioni matematiche, algoritmi e strutture di dati. Per fare solo alcuni degli esempi più famosi basta citare l'MCM, il fattoriale, gli alberi e le grammatiche.
Alcuni potrebbero obbiettare che in fondo algoritmi come il fattoriale sono intuitivi e semplici da realizzare anche con un ciclo. Perché dovremmo perdere la testa con queste amenità? Il fatto è che non tutti gli algoritmi sono come quelli appena citati.
Ne esistono alcuni che se scritti tramite la ricorsione risultano incredibilmente più veloci e il codice da scrivere è molto inferiore ad una implementazione iterativa.
Il problema è che non tutti riescono a pensare ad un algoritmo in modo ricorsivo e questo porta a molti errori e ai loop.
I loop sono il più grande pericolo di chi scrive funzioni ricorsive. Si dice infatti che una funzione, quando entra in loop, non riesce ad uscire dal ciclo e non termina mai bloccando di fatto il programma.
In genere è possibile suddividere una funzione ricorsiva in tre grandi blocchi: l'invariante, la terminazione e la progressione.
L'invariante è quella condizione che indica quando si deve procedere con l'esecuzione della sequenza di funzioni ricorsive.
La terminazione specifica che output deve dare la funzione quando non è valida la condizione dell'invariante.
Ed in fine la progressione che descrive in che modo ottenere la nuova azione a partire dalla precedente.
Una volta trovati questi tre macroblocchi è facile comporli per ottenere una funzione ricorsiva funzionante.
<?php /* esempio di una funzione ricorsiva che calcola l'mcm di due numeri in questo caso: Invariante: $a > $b Terminazione: $a == $b allora $a Progressione: Se $a > $b allora $a - $b, $b altrimenti $a, $b - $a */ function mcm ($a , $b) { return (($a == $b) ? $a : (($a > $b) ? mcm($a - $b, $b) : mcm($a, $b - $a))); } ?>
Ho volutamente usato un algoritmo semplice per spiegare. In questo modo spero di non aver spaventato nessuno. Per ora non andrò avanti con la ricorsione ma consiglio a tutti di cercare su internet documenti di approfondimento e a fare esercizi che vi aiuteranno di sicuro.
-
» 2011-05-28
Come usare i Cookie con PHP -
» 2010-04-24
Sintassi alternativa -
» 2010-04-24
Return -
» 2010-04-24
Break
Se ti piace questo articolo, puoi collegarlo al tuo sito copiando il seguente codice HTML nelle tue pagine.
-
30-06-2011 → Anonimo
ha scritto un commento in
Tutorial sul ripristino di GRUB -
26-05-2011 → Bianca
ha scritto un commento in
Arrotondare gli angoli di un div usando i CSS 3 -
25-05-2011 → `wee`
ha scritto un commento in
Le landing page - Cosa sono e a cosa servono -
19-02-2011 → Anonimo
ha scritto un commento in
Linux Reference - Lista comandi utili per Linux -
06-01-2011 → Sergio
ha scritto un commento in
Ottimizzare i metatag delle pagine multilingua -
05-06-2010 → Anonimo
ha scritto un commento in
SQL - Data Manipulation Language - SELECT
Inserisci un commento: