3° Anno TEORIA 7. Metodologie di progettazione e programmazione | Page 29

6 . Metodologia top-down e sottoprogrammi Versione 5.0 – Aprile 2023
DEF 3 : Si parla invece di ricorsione INDIRETTA quando nella definizione di un sottoprogramma compare la chiamata ad un altro sottoprogramma il quale , direttamente o indirettamente , chiama il sottoprogramma iniziale
Esempio : funzioni cooperanti
FUNZIONE F1 ( VAL n : INT ) : INT esito : INT INIZIO
SE ( n < 1 )

ALLORA esito � 1 ALTRIMENTI esito � F2 ( n-1 ) FINE SE

RITORNA ( esito )

FINE

FUNZIONE F2 ( VAL n : INT ) : INT esito : INT INIZIO
SE ( n < 2 )

ALLORA esito � 0 ALTRIMENTI esito � F1 ( n-2 ) FINE SE

RITORNA ( esito )

FINE

VANTAGGI DEGLI ALGORITMI RICORSIVI RISPETTO A QUELLI ITERATIVI
a ) Un algoritmo ricorsivo è più facile da realizzare perché risolve un problema complesso riducendolo a problemi dello stesso tipo ma su dati di ingresso più semplici
b ) Un algoritmo ricorsivo è più facile da capire da parte di altri programmatori che non siano autori di quel software
SVANTAGGI DEGLI ALGORITMI RICORSIVI RISPETTO A QUELLI ITERATIVI
a ) Per poter utilizzare un algoritmo ricorsivo occorre un grosso sforzo iniziale da parte del progettista / programmatore per poter acquisire una visione ricorsiva del problema posto
b ) E ’ facilmente possibile avere ricorsioni che non terminano mai ( ricorsione infinita ) ossia un sottoprogramma che richiama se stesso infinite volte o perché è stata omessa la clausola di terminazione o perché i valori del parametro ricorsivo non si semplificano mai . Dopo un certo numero di chiamate la memoria disponibile per quel sottoprogramma si esaurisce ed esso viene terminato automaticamente con segnalazione di errore di overflow nello stack conseguente crash del programma in esecuzione
c ) Eccessiva occupazione dello spazio di memoria attraverso l ’ utilizzo di variabili locali non necessarie
d ) Aumento dei tempi di esecuzione ( soluzione meno efficiente ) soprattutto degli algoritmi ricorsivi che presentano ricorsioni multiple dovute al proliferare delle chiamate ricorsive con conseguente aggravio dei costi di chiamata di un sottoprogramma
Autore : Rio Chierego ( email : riochierego @ libero . it - sito web : www . riochierego . it )
Pag . 29