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, prese, ritorna" fino a quando non è stato applicato l'ultima scandole. A quel punto, il tetto è libero di passare al lavoro successivo o andare a casa.

Sebbene l'esempio iS 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 fine è 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 del sistema. Normalmente il sovraccarico si schianterà il programma ad un certo punto, ma quando viene scoperto il problema, si possono fare danni significativi.

I programmatori esperti potrebbero riconoscere la somiglianza tra una chiamata ricorsiva e un ciclo "per" o "mentre". Se, ad esempio, l'obiettivo è trovare il conteggio totale dell'inventario di tutte le azioni con la parte nUmber superiori a 999, un loop "per" dice al programma di individuare tutte le istanze di qualificazione e un loop "mentre" dice al programma di eseguire il loop solo mentre la condizione dichiarata è 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.

ALTRE LINGUE

Questo articolo è stato utile? Grazie per il feedback Grazie per il feedback

Come possiamo aiutare? Come possiamo aiutare?