Skip to main content

Ano ang tawag sa buntot?

Sa computer programming, ang isang tawag sa buntot ay isang tiyak na sitwasyon sa loob ng code ng mapagkukunan ng programa kung saan ang isang function, subroutine o pamamaraan ay nagbabalik ng isang inaasahang halaga sa pamamagitan ng pagtawag ng isa pang pag -andar sa halip na pagpasa lamang ng isang variable na paghawak ng halaga ng pagbabalik.Ang pangalan mismo ay nagpapahiwatig na ang pag -andar na tinawag upang makalkula ang halaga na ibabalik ay sa dulo, o buntot, ng pag -andar na tumatawag nito upang magbigay ng isang halaga ng pagbabalik.Ang isang tawag sa buntot ay interesado sa ilang mga programmer dahil, na may ilang mga pag -optimize o pag -uugali ng compiler, walang karagdagang puwang ng stack na ginagamit upang mag -imbak ng mga lokasyon ng code ng pangunahing pag -andar;Ang pag -andar ng buntot sa halip ay ginagamit upang makabuo ng mga ulat ng halaga ng pagbabalik nang direkta pabalik sa punto ng tawag kung saan ang orihinal na pag -andar ay hinihimok.Ang paggamit ng isang tawag sa buntot ay partikular na kapaki -pakinabang sa mga sitwasyon kung saan ginagamit ang pag -urong, dahil ang dami ng puwang ng stack na ginamit upang maiimbak ang mga tumatawag na mga address sa mga kaso kung saan ang mga tawag na recursive ay hindi masyadong mabilis na maubusan at ihinto ang pagpapatupad ng programa.Bagaman ang paggamit ng mga tawag sa buntot ay makakatulong na madagdagan ang bilis, paggamit ng memorya at kahusayan sa isang programa, maaari rin itong humantong saRecursion.

Ang pagkakaroon ng isang tawag sa buntot ay dahil sa malaking bahagi kung paano gumagana ang call stack sa loob ng karamihan sa mga programa sa computer at mga arkitektura ng system.Ang stack, na tulad ng isang stack ng mga plato, ay isang first-in, last-out na istraktura ng data.Kapag ang isang function, ang subroutine o pamamaraan ay tinawag, ang address kung saan ginawa ang tawag, na tinatawag na isang stack frame, ay naka -imbak sa salansan.Nangangahulugan ito ng isang programa na tumatawag sa pag -andar A, na pagkatapos ay tumatawag ng function B, ay magkakaroon ng dalawang mga frame ng stack, ang isa para sa pag -andar B at isa pa sa ilalim nito para sa pag -andar A. Pagkatapos ng pag -andar B ay tapos na ang pagpapatupad, ang stack frame nito ay na -pop mula sa tuktok ngAng stack at pagpapatupad ay bumalik sa pag -andar A, na kung saan ay may frame na naka -out sa stack kapag tapos na ito, sa wakas ay nagbabalik ng control control hanggang sa kung saan ang unang pag -andar ay orihinal na tinawag.

Kapag ginamit ang isang tawag sa buntot, ang pahayag ng pagbabalik saAng isang function ay direktang gumagamit ng halaga ng pagbabalik ng isa pang pag -andar bilang data na maipadala sa calling code.Sa halimbawa sa itaas, kung ang pag -andar ng isang tawag na function B nang direkta sa pahayag ng pagbabalik, pagkatapos ay nabuo ang isang tawag sa buntot.Sa loob ng call stack, sa halip na magkaroon ng isang stack frame para sa parehong mga pag -andar A at B, ang function B ay makakatanggap ng return address mula sa function A at ang pag -andar ng stack frame ay mai -pop at itatapon, nangangahulugang ang pag -andar b ay ipapasa ang halaga ng pagbabalik nito nang direkta pabaliksa lokasyon na tinatawag na function na walang unang kinakailangang pumasa sa control pabalik sa pag -andar A. pinatataas nito ang bilis ng mga tawag sa pag -andar pati na rin ang pagtulong upang mapanatili ang dami ng impormasyon sa salansan.

Ang mga katangian ng isang tawag sa buntot ay maaaring gumawaAng mga ito ay isang kaakit -akit na pagpipilian para sa mga pag -andar ng recursive.Ang isang pag -andar ng recursive ay isa na tumawag mismo nang paulit -ulit upang makalkula ang isang halaga, tulad ng maaaring mangyari kapag naglalakad ng isang istraktura ng data ng listahan.Walang karagdagang mga frame ng stack na nilikha para sa mga nested function na tawag, kaya napakalalim na antas ng pag -urong ay maaaring maisagawa nang ligtas nang walang agarang banta ng isang pag -apaw ng stack at posibleng pagwawakas ng programa.