U računalnom programiranju, repni poziv je specifična situacija unutar izvornog koda programa u kojoj funkcija, potprogram ili procedura vraća očekivanu vrijednost pozivanjem druge funkcije umjesto jednostavnim prosljeđivanjem varijable koja drži povratnu vrijednost. Samo ime označava da je funkcija pozvana da izračuna vrijednost koju treba vratiti je na kraju, ili na repu, funkcije koja je poziva da dostavi povratnu vrijednost. Poziv repa zanimljiv je nekim programerima jer se, uz određene optimizacije ili ponašanja prevoditelja, ne koristi dodatni prostor stog za pohranjivanje lokacija koda glavne funkcije; tail funkcija se umjesto toga koristi za generiranje izvješća o povratnoj vrijednosti izravno natrag na pozivnu točku gdje je izvorna funkcija pozvana. Upotreba repnog poziva osobito je korisna u situacijama u kojima se koristi rekurzija, jer količina prostora u stogu koji se koristi za pohranu adresa pozivatelja u slučajevima u kojima se rekurzivni pozivi vrlo duboko gnijezde može brzo ponestati i zaustaviti izvršavanje programa. Iako korištenje tail poziva može pomoći u povećanju brzine, upotrebe memorije i učinkovitosti u programu, također može dovesti do situacija u kojima se izvorni kod restrukturira tako da koristi pozive na način koji otežava otklanjanje pogrešaka i praćenje, posebno u slučajevima rekurzija.
Postojanje repnog poziva velikim je dijelom posljedica načina na koji skup poziva radi unutar većine računalnih programa i arhitektura sustava. Stog, koji je poput hrpe ploča, struktura je podataka prvi ušao, zadnji izašao. Kada se pozove funkcija, potprogram ili procedura, adresa s koje je upućen poziv, nazvana okvir steka, pohranjuje se u stog. To znači da će program koji poziva funkciju A, koja zatim poziva funkciju B, imati dva okvira stoga, jedan za funkciju B, a drugi ispod njega za funkciju A. Nakon što funkcija B završi s izvršavanjem, njen okvir stoga se iskoči s vrha stog i izvršenje se vraća na funkciju A, čiji okvir je iskočio iz stog kad je gotov, konačno vraćajući kontrolu programa na točku s koje je prva funkcija izvorno pozvana.
Kada se koristi repni poziv, izraz return u funkciji izravno koristi povratnu vrijednost druge funkcije kao podatke koji se šalju pozivnom kodu. U gornjem primjeru, ako funkcija A poziva funkciju B izravno s povratnom naredbom, tada je formiran repni poziv. Unutar stog poziva, umjesto da ima stog okvira za obje funkcije A i B, funkcija B će primiti povratnu adresu od funkcije A, a okvir stoga funkcije A će biti iskopan i zbrinut, što znači da će funkcija B prenijeti svoju povratnu vrijednost izravno natrag na mjesto koje je pozvalo funkciju A bez prethodnog prijenosa kontrole natrag na funkciju A. To povećava brzinu poziva funkcija, kao i pomaže u smanjenju količine informacija u stogu.
Svojstva repnog poziva mogu ih učiniti vrlo atraktivnom opcijom za rekurzivne funkcije. Rekurzivna funkcija je ona koja se više puta poziva kako bi izračunala vrijednost, kao što može biti slučaj kada se prelazi kroz strukturu podataka popisa. Za pozive ugniježđenih funkcija ne stvaraju se dodatni okviri stoga, tako da se vrlo duboke razine rekurzije mogu izvesti na siguran način bez neposredne prijetnje prelijevanja stoga i mogućeg prekida programa.