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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Profile

amarao: (Default)
amarao

February 2026

S M T W T F S
123456 7
8910111213 14
15161718192021
22232425262728

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 26th, 2026 12:10 am
Powered by Dreamwidth Studios