amarao: (Default)
amarao ([personal profile] amarao) wrote2022-12-13 06:48 pm

Вектор in discuse

Я правильно понимаю, что любой рекурсивный алгоритм неявно использует стек, который, в свою очередь, всего лишь модная версия Vec? То есть когда кто-то изящно решает задачу на списках с помощью рекурсии, то он просто показывает как с помощью синтакстического сахара языка переложить список в вектор?
juan_gandhi: (Default)

[personal profile] juan_gandhi 2022-12-13 04:53 pm (UTC)(link)

Ну почему, есть же хвостовая рекурсия, там стек не нужен.

[personal profile] aklepatc 2022-12-13 08:17 pm (UTC)(link)
А чем принципиально отличается хвостовая? Если не трудно и возможно "в двух словах"...
Спасибо!

UPD: нагуглил. Вроде стэк всё равно нужен? Просто можно сэкономить один frame?
Edited (Уточнение ) 2022-12-13 20:20 (UTC)

[personal profile] aklepatc 2022-12-13 08:55 pm (UTC)(link)
Кажется понял. Ещё раз спасибо!
То есть у нас, при хорошем раскладе, будет задействован всего один stack frame на всю цепочку рекурсивных вызовов, так?

[personal profile] permeakra 2022-12-13 08:59 pm (UTC)(link)
Да.

Задание на дом - взять классическое двоичное дерево* и модифицировать его так, чтобы рекурсивный обход можно было выполнить в одном стек фрейме.

* Узел дерева
struct Tree
{ int payload; Tree* left; Tree* right;}
Edited 2022-12-13 20:59 (UTC)
juan_gandhi: (Default)

[personal profile] juan_gandhi 2022-12-13 09:21 pm (UTC)(link)

Стек не нужен. Вместо call - фактически goto. Как цикл.

[personal profile] aklepatc 2022-12-13 09:28 pm (UTC)(link)
Разумно. Спасибо!
straktor: benders (Default)

[personal profile] straktor 2022-12-13 10:01 pm (UTC)(link)
> стек, который, в свою очередь, всего лишь модная версия Vec

доступа по индексу в стеке (высокоуровневого языка) нету например

> как с помощью синтакстического сахара языка переложить список в вектор

я писал на бейсике поиск пути в графе, естественно без функций-параметров и даже gosub
с сахаром код намного понятней

разумеется любой рекурсивный алгоритм можно перевести на явный стек с goto, которые возможно моделировать структурным кодом со switch
чаще всего будет лапша