powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничная хвостовая рекурсия.
6 сообщений из 56, страница 3 из 3
Тяпничная хвостовая рекурсия.
    #40032720
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
petrav
пропущено...

Они (деструкторы) начнут вызываться в неправильной последовательности. Это принципиально.

Или же они вообще перестанут вызываться.

А как деструкторы связаны с хвостовой рекурсией?

Я понял тему топика так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
void foo(int a)
{
    ++a;
    if (a>6)
    {
        return;
    }
    else
    {
       foo(a);
    }
}


Я корректно всё понял? И вместо рекурсии в ассемблере будет jump на начало функции?
...
Рейтинг: 0 / 0
Тяпничная хвостовая рекурсия.
    #40032723
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
void foo(int a)
{
    ++a;
    if (a>6)
    {
        return;
    }
    else
    {
       foo(a);
    }
}


Я корректно всё понял? И вместо рекурсии будет jump на начало функции?

Я не силен в теории построения компилляторов. Но по моему свертка хвоста превращает рекурсию
в банальный loop. Как там в ассемблере делется loop? Я щас не помню. Много вариантов.
Да можно jump сделать. А можно JNZ (jump-non-zero-flag). Суть вобщем не в этом.
А в том что стек не будем потреблять.

И еще убийственная киллер фича всей функциональщины - все переменные в такой
функции становятся values. Константами. Раз нет цикла. То ничего и не меняется.

Вселенная с застывшим временем.
...
Рейтинг: 0 / 0
Тяпничная хвостовая рекурсия.
    #40032726
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Я не силен в теории построения компилляторов. Но по моему свертка хвоста превращает рекурсию
в банальный loop. Как там в ассемблере делется loop? Я щас не помню. Много вариантов.
Да можно jump сделать. А можно JNZ (jump-non-zero-flag). Суть вобщем не в этом.
А в том что стек не будем потреблять.

И еще убийственная киллер фича всей функциональщины - все переменные в такой
функции становятся values. Константами. Раз нет цикла. То ничего и не меняется.

Вселенная с застывшим временем.

Отлично. Я как раз недавно смотрел научно популярный ролик как вернуть время назад. На Физике Побединского.
Но вернёмся к деструкторам и доработаем код.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
void foo(int a)
{
    MyObject obj;
    ++a;
    if (a>6)
    {
        return;
    }
    else
    {
       foo(a);
    }
}



Тут два варианта:

- При честной рекурсии у нас деструкторы класса MyObject вызываются в правильной последовательности.
- А при фокусах с разворачиванием рекурсии в цикл что с ними будет? ПНХ?
...
Рейтинг: 0 / 0
Тяпничная хвостовая рекурсия.
    #40032728
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,

в вашем примере для компилятора нет хвостовой рекурсии
так как вызов не хвостовой, он такой лишь на первый взгляд
...
Рейтинг: 0 / 0
Тяпничная хвостовая рекурсия.
    #40032733
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
petrav,

в вашем примере для компилятора нет хвостовой рекурсии
так как вызов не хвостовой, он такой лишь на первый взгляд

Конечно, я понимаю, что деструктор неявно вызывается в конце функции. Упрощённо.
Но что будет если MyObject изначально был алиасом к int, а потом я переделал MyObject на класс с деструктором?
Поэтому я сразу и написал, что тогда в язык нужно добавить атрибут к функции "настаиваю на хвостовой рекурсии".
Не получилось -- сбой компиляции.
...
Рейтинг: 0 / 0
Тяпничная хвостовая рекурсия.
    #40032745
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Поэтому я сразу и написал, что тогда в язык нужно добавить атрибут к функции "настаиваю на хвостовой рекурсии".
Не получилось -- сбой компиляции.
я тоже так думаю - "явное лучше неявного"
...
Рейтинг: 0 / 0
6 сообщений из 56, страница 3 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничная хвостовая рекурсия.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]