Ce este o recursiune de coadă?

Recursiunea coadă este un tip de apel de metodă de programare în care o metodă se autoapelează, apoi returnează imediat valoarea acelui al doilea apel. Cu alte cuvinte, recursiunea cozii apare atunci când declarația finală din interiorul unei metode este un alt apel la aceeași metodă. Parametrii din al doilea apel de metodă sunt în general diferiți de cei din primul, dar acest lucru nu este necesar. Pentru ca această recursivitate să funcționeze, metoda care este apelată în sine trebuie să returneze o valoare concretă, cum ar fi un număr, șir sau alt obiect. Metodele Void, care nu returnează o valoare, nu funcționează bine pentru recursivitate.

Cerința ca un apel recursiv să fie ultima instrucțiune din metoda sa de apelare nu înseamnă neapărat că apelul recursiv este ultima linie din metodă. Un apel corect de recursivitate poate fi găsit și în interiorul unei structuri de control, ceea ce înseamnă că, în codul sursă, structura de control poate încheia metoda mai degrabă decât apelul. Distincția importantă în acest caz este că o structură de control nu este o instrucțiune de programare, ci o parte încorporată a limbajului computerului.

Recursiunea cozii există în multe limbaje de calculator, inclusiv Java și C++. Frecvent, aceste apeluri recursive pot fi rescrise folosind alte mijloace, cum ar fi bucle for, bucle while sau instrucțiuni goto. Utilitatea recursiunii se găsește atunci când se creează mai multe apeluri secvențiale la aceeași metodă. Recursiunea este adesea cea mai curată și mai ușoară modalitate de a îndeplini sarcini repetitive.

Un exemplu obișnuit de recursivitate de coadă este o metodă care calculează factorialul unui număr. Acest proces este ideal deoarece, începând de la orice număr, fiecare număr înainte de a fi înmulțit împreună. Deci, pentru a găsi factorialul lui 5, procesul potrivit pentru a face asta ar fi să înmulți 5*4*3*2*1. Recursiunea vine din cauza modului în care este structurată metoda factorială: dacă factorialul este 1, returnează 1, în caz contrar returnează factorialul numărului dat metodei minus unu. Această metodă este, de asemenea, utilă deoarece poate fi scrisă în mod echivalent folosind oricare dintre tipurile de recursivitate de coadă, cu sau fără o instrucțiune de control în jurul unui apel final de metodă.

Recursiunea cozii este doar un exemplu al multiplelor tipuri de recursivitate. Conceptul în toate tipurile de recursivitate este în esență același, că într-un fel o metodă se numește pe sine. Dintre aceste tipuri, distincția recursiunii cozii este că valoarea unui apel recursiv este returnată imediat și nimic altceva nu se întâmplă în metoda de apelare după acel apel.