2015-10-06 7 views

ответ

0

Этот код уже является хвостовым рекурсивным. У вас есть рекурсия как последнее утверждение, поэтому сначала вы вычисляете результат, а затем вызываете рекурсию.

1

Если вы не видите, почему ваш код уже хвост-рекурсивный, вот тот же код с немного менее синтаксическим сахаром. Ваша функция была преобразована в процедуру с дополнительным аргументом для сохранения результата (это обозначается факультативным «?»).

proc {AppendLists L1 L2 ?R} 
    if L1 == nil then L2 
    else K in 
    R = L1.1 | K 
    {AppendLists L1 L2 K} 
    end 
end