1. Вводится новая функция с дополнительным аргументом (аккумулятором), в котором накапливаются результаты вычислений.
2. Начальное значение аккумулирующего аргумента задается в равенстве, связывающем старую и новую функции.
3. Те равенства исходной функции, которые соответствуют выходу из рекурсии, заменяются возвращением аккумулятора.
4. Равенства, соответствующие рекурсивному определению, выглядят как обращения к новой функции, в котором аккумулятор получает то значение, которое возвращается исходной функцией.
Возникает вопрос: любую ли функцию можно преобразовать для вычисления с аккумулятором? Очевидно, что ответ на этот вопрос отрицателен. Построение функций с накапливающим параметром — приём не универсальный, и он не гарантирует получения хвостовой рекурсии. С другой стороны, построение определений с накапливающим параметром является делом творческим. В этом процессе необходимы некоторые эвристики.
Определение:
Общий вид рекурсивных определений, позволяющих при трансляции обеспечить вычисления в постоянном объёме памяти через итерацию, называется равенствами в итеративной форме.
Общий вид равенств в итеративной форме может быть описан следующим образом:
fi (pij) = eij
При этом на выражения eij накладываются следующие ограничения:
1. eij — "простое" выражение, т.е. оно не содержит рекурсивных вызовов, а только операции над данными.
2. eij имеет вид fk (vk), при этом vk — последовательность простых выражений. Это и есть хвостовая рекурсия.
3. eij — условное выражение с простым выражением в условии, ветви которого определяются этими же тремя пунктами.