В компютърното програмиране, рекурсията на опашката е използването на опашка за изпълнение на рекурсивна функция. Извикването на опашката е когато функцията се нарича последен акт на друга функция. Например в тази програма на JavaScript:
var myTailFunc = function (myVar) {върнете myVar; }; var myFunc = function (myVar) {върнете myTailFunc (myVar); };
Тук повикването към myTailFunc (myVar) е опашка, защото е последната операция на myFunc (myVar) . Когато компилаторът види, че това е крайната операция на myFunc, той може да извърши малка оптимизация. По същество не е необходимо да връща адрес за връщане в стека, тъй като няма да се налага да се връща към myFunc . Може да върне връщаната стойност на myTailFunc като връщаната стойност на myFunc .
Тази малка оптимизация става по-значима, когато се използва в рекурсивна функция. Обикновено всяко ниво на рекурсия изисква допълнителен обратен адрес, който да бъде избутан в стека. Рекурсията на опашката прави това ненужно.
Ето един пример за проста факторна функция на JavaScript, написана първо без и след това с рекурсия на опашката.
Факториална функция без рекурсия на опашката
var factorial = функция (n) {if (n == 0) {return 1; } else {върнете n * факториал (n - 1); }};
Тази функция е рекурсивна, но не рекурсивна. Крайният процес на функцията е операцията за умножение (" * "), така че рекурсията винаги ще трябва да се върне към функцията за повикване.
Факториална функция с рекурсия на опашката
var factorial = функция (n) {var recursion = функция (n, subTotal) {if (n == 0) {return subTotal; } else {рекурсия на връщане (n - 1, n * subTotal); }}; връщане на рекурсия (n, 1); };
Функция, програмни термини