это хвостовая рекурсия

85 views
Skip to first unread message

Max Pantuhin

unread,
Mar 1, 2013, 7:34:09 AM3/1/13
to erlang-...@googlegroups.com
Пример А
 
f_A (Args) ->
     case f_B(Args) of
         test1 ->
             f_A(arg1);
         test2 ->
             f_A(arg2);
         _ ->
             f_A(arg3)
end.
 
Пример2
 
f_A (Args) ->
  NewArgs =   
    case f_B(Args) of
         test1 ->
             arg1;
         test2 ->
             arg2;
         _ ->
             arg3
end,
f_A(NewArgs).
 
Правильно ли я понимаю, что Пример1 это не хвостовая рекурсия, а Пример2 - хвостовая рекурсия.
И если использовать Пример1, то занимаемая процессом память будет расти от итерации к итерации, а если использовать Пример2, то этого не произойде.

Petr Kozorezov

unread,
Mar 1, 2013, 7:37:07 AM3/1/13
to erlang-...@googlegroups.com
О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫-О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

On 3/1/13 4:34 PM, Max Pantuhin wrote:
О©╫О©╫О©╫О©╫О©╫О©╫ О©╫
О©╫
f_A (Args) ->
О©╫О©╫О©╫О©╫ case f_B(Args) of
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ test1 ->
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ f_A(arg1);
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ test2 ->
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ f_A(arg2);
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ _ ->
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ f_A(arg3)
end.
О©╫
О©╫О©╫О©╫О©╫О©╫О©╫2
О©╫
f_A (Args) ->
О©╫О©╫NewArgs = О©╫О©╫
О©╫О©╫О©╫ case f_B(Args) of
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ test1 ->
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ arg1;
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ test2 ->
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ arg2;
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ _ ->
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ arg3
end,
f_A(NewArgs).
О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫1 О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫2 - О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫1, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫2, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
--
--
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫: http://groups.google.com/group/erlang-russian
О©╫О©╫О©╫О©╫О©╫О©╫О©╫: http://erlanger.ru
О©╫О©╫О©╫: xmpp://erl...@conference.jabber.ru
О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫: xmpp://erlang...@conference.jabber.ru
О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫: http://erlanger.ru/ru/erlang-at-conference-jabber-ru
О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫: erlang-...@googlegroups.com
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫: erlang-russia...@googlegroups.com
---
О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ Erlang О©╫О©╫-О©╫О©╫О©╫О©╫О©╫О©╫.
О©╫
О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ erlang-russia...@googlegroups.com.
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ https://groups.google.com/groups/opt_out.
О©╫
О©╫

Maxim Sokhatsky

unread,
Mar 1, 2013, 7:41:07 AM3/1/13
to erlang-...@googlegroups.com
А не интересно самому запустить просто посмотреть что будет ?
Тебе ответили, но это не твой опыт.


Date: Fri, 1 Mar 2013 16:37:07 +0400
From: petr.ko...@gmail.com
To: erlang-...@googlegroups.com
Subject: Re: это хвостовая рекурсия

Они обе хвостовые.
Не хвостовой они будут, когда после вызова есть какие-либо другие действие, а в данном случае рекурсивный вызов всегда последний.


On 3/1/13 4:34 PM, Max Pantuhin wrote:
--
--
Страница рассылки: http://groups.google.com/group/erlang-russian
Новости: http://erlanger.ru
Чат: xmpp://erl...@conference.jabber.ru
Чат для оффтопа: xmpp://erlang...@conference.jabber.ru
Правила, действующие в чате и рассылке: http://erlanger.ru/ru/erlang-at-conference-jabber-ru
 
Написать письмо: erlang-...@googlegroups.com
Отписаться: erlang-russia...@googlegroups.com
---
Вы получили это сообщение, поскольку подписаны на группу Erlang по-русски.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес erlang-russia...@googlegroups.com.
Подробнее о функциях можно узнать на странице https://groups.google.com/groups/opt_out.
 
 


--
--
Страница рассылки: http://groups.google.com/group/erlang-russian
Новости: http://erlanger.ru
Чат: xmpp://erl...@conference.jabber.ru
Чат для оффтопа: xmpp://erlang...@conference.jabber.ru
Правила, действующие в чате и рассылке: http://erlanger.ru/ru/erlang-at-conference-jabber-ru
 
Написать письмо: erlang-...@googlegroups.com
Отписаться: erlang-russia...@googlegroups.com
---
Вы получили это сообщение, поскольку подписаны на группу Erlang по-русски.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес erlang-russia...@googlegroups.com.
Подробнее о функциях можно узнать на странице https://groups.google.com/groups/opt_out.
 
 

Danil A. Zagoskin

unread,
Mar 1, 2013, 8:03:30 AM3/1/13
to erlang-...@googlegroups.com
Максим, ну не все же сразу начинают чувствовать конструкции нового для себя языка (а судя по вопросу, человек только-только взял его в руки).
А усваивать средства отладки раньше, чем синтаксис — весьма спорный по удовольствию и продуктивности путь, мне кажется.
Попишет полгодика, пособирает крешдампы, все поймет и всему научится. Если представления о программировании испорчены чем-то вроде яваскрипта или пхп, понятие хвостовой рекурсии может быть совсем не очевидным, особенно если еще не до конца поняты концепции единичного присваивания и того, что любая конструкция есть выражение.

Ну, то есть, зря ты так, я считаю.


1 марта 2013 г., 16:41 пользователь Maxim Sokhatsky <ma...@synrc.com> написал:

Maxim Sokhatsky

unread,
Mar 1, 2013, 8:06:11 AM3/1/13
to erlang-...@googlegroups.com
Прости, я его перепутал с чуваком которые три месяца
про нитроген спрашивает как кота научить писать сайты :-)


From: da...@st-olen.ru
Date: Fri, 1 Mar 2013 17:03:30 +0400

Subject: Re: это хвостовая рекурсия
Reply all
Reply to author
Forward
0 new messages