Как уже говорилось ранее * (& in-1) - это адрес возврата , 5 (я полагаю) - это размер функции (в словах?), И он вычитает оба, чтобы получить адрес, с которого начинается функция.
РЕДАКТИРОВАТЬ: Поскольку я думаю, что изменение обратного адреса является постоянным, я не понимаю, почему 5 вычитается при> 1;
РЕДАКТИРОВАТЬ 2: См.комментарии
Инструкция возврата ассемблера переходит только по адресу, который находится на вершине стека.
Из-за соглашения о вызовах параметры помещаются в стек и удаляются из неговызывающий абонент.Поскольку существует только один реальный вызов, рекурсии нет, параметры и адрес возврата (указатель) совместно используются итерациями.
Это больше похоже на цикл, чем на рекурсивную функцию.