Skip to main content

Mi az a farokhívás?

A számítógépes programozás során a farokhívás egy konkrét helyzet a program forráskódjában, amelyben egy függvény, alprogram vagy eljárás visszatér egy várt értéket, ha egy másik funkciót hív be, ahelyett, hogy egyszerűen átadná a visszatérési értéket.Maga a név azt jelzi, hogy a visszaadni kívánt érték kiszámításához hívott függvény a végén vagy farok végén van, amelynek hívja a visszatérési értéket.A farokhívás néhány programozó számára érdekes, mivel bizonyos optimalizálás vagy fordító viselkedés mellett a fő funkció kódhelyének tárolására nem használnak további veremteret;A farok funkciót inkább a visszatérési értékjelentések generálására használják közvetlenül a híváspontra, ahol az eredeti funkciót meghívták.A farokhívás használata különösen hasznos olyan helyzetekben, amikor rekurziót alkalmaznak, mivel a hívóanyag címeinek tárolására használt veremterület mennyisége azokban az esetekben, amikor a rekurzív hívások nagyon mélyen elfogyhatnak, és leállíthatják a program végrehajtását.Noha a farokhívások használata elősegítheti a program sebességének, a memóriak használatának és hatékonyságának növelését, ez olyan helyzetekhez is vezethet, amelyekben a forráskódot átszervezik, hogy a hívásokat oly módon használják, amely megnehezíti a hibakeresést és a nyomon követést, különösen az esetekben.rekurzió.A verem, amely olyan, mint egy tányér halom, egy első in-out-out adatszerkezet.Amikor egy függvényt, szubrutint vagy eljárást hívnak, akkor a hívás, amelyből a hívást, a verem keretnek nevezik, a veremben tárolják.Ez azt jelenti, hogy egy olyan programot hívnak, amely az A funkciót hívja, amely ezután a B függvényt hívja, két halomkerettel lesz, az egyik a B függvényhez, a másik pedig az A. funkcióhoz.A verem és a végrehajtás visszatér az A funkcióhoz, amelynek keretét akkor bukkan fel a veremből, amikor elkészül, végül visszatér a programvezérlésre arra a pontra, ahonnan az első funkciót eredetileg hívták.Egy függvény közvetlenül egy másik függvény visszatérési értékét használja a hívó kódra elküldendő adatokként.A fenti példában, ha az A függvény közvetlenül a visszatérési utasítással, akkor a farokhívás alakult ki.A híváskötegben ahelyett, hogy mindkét A és B funkcióhoz kötegkeret lenne, a B függvény megkapja a visszatérési címet az A és az A funkció verem keretéből, és ártalmatlanítja a B funkciót közvetlenül a visszatérési értéket.az A funkciónak nevezett helyre, anélkül, hogy először át kellene adnia a vezérlést az A funkcióhozNagyon vonzó lehetőség a rekurzív funkciókhoz.A rekurzív funkció az, amely többször felhívja az érték kiszámítását, amint ez lehet a lista adatszerkezetének áthaladásakor.A beágyazott funkcióhívásokhoz nem hoznak létre további veremkereteket, így a rekurzió nagyon mély szintje biztonságosan elvégezhető anélkül, hogy a verem túlcsordulása és a lehetséges program megszüntetése azonnali fenyegetése nélkül.