Skip to main content

Cos'è una chiamata ricorsiva?

Nella programmazione, una chiamata ricorsiva è un comando all'interno di una subroutine o funzione che dice al programma di eseguire nuovamente la stessa subroutine.Le prestazioni ripetute possono essere il risultato diretto della funzione o si può innescare una seconda funzione che, a sua volta, si riferisce alla prima funzione.Una chiamata ricorsiva ha alcune somiglianze con il temuto anello infinito, ma la subroutine ha sempre una dichiarazione condizionale che indica al programma quando smettere di ripetere la ricorsione.

Il concetto di ricorsione è forse meglio illustrato attraverso l'uso di un esempio.Supponiamo che un tetto stia applicando nuove tegole a una casa.Per iniziare, deve portare un fascio di tegole sul tetto.Una volta che ha inchiodato il primo pacchetto in posizione, deve arrampicarmi lungo la scala, recuperare un altro fascio e inchiodare in posizione.Il processo continua come una serie di go, recupera, ritorna fino a quando non è stato applicato l'ultimo ghiaccio.A quel punto, il tetto è libero di passare al lavoro successivo o andare a casa. Se l'esempio sia una semplificazione eccessiva, contiene tutti gli elementi di una chiamata ricorsiva.C'è un punto di partenza, il tetto deve recuperare ciò di cui ha bisogno, tornare all'inizio e, quando la condizione finale viene soddisfatta, fermarsi.Questo è fondamentalmente ciò che fa il programma;Inizia, implementa un'azione, ritorna a se stessa e termina quando si verifica la condizione finale.

La condizione di finale viene definita caso di base.È essenziale per tutte le chiamate ricorsive;Senza di essa, la funzione continuerebbe a ripetere.Nella migliore delle ipotesi, ciò si traduce nel drenare le risorse di memoria dei sistemi.Normalmente il sovraccarico si schianterà il programma ad un certo punto, ma quando viene scoperto il problema, si può fare un danno significativo.

I programmatori esperti potrebbero riconoscere la somiglianza tra una chiamata ricorsiva e una per o durante il ciclo.Se, ad esempio, l'obiettivo è trovare il conteggio totale dell'inventario di tutti i titoli con numeri di parte superiori a 999, A per loop dice al programma di individuare tutte le istanze di qualificazione e un while Loop indica al programma di eseguire il loop solo mentre il dichiarato dichiaratola condizione è valida.Si può dire che una chiamata ricorsiva combini alcune delle caratteristiche di questi loop con una dichiarazione IF-THEN-ELSE;Se questa condizione è vera, allora fallo, oppure fai qualcosa di diverso se la condizione è falsa.La ricorsione in genere consente un codice più compatto, tuttavia, e consente di passare il problema alla funzione più vicino al punto in cui è necessario.