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

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
Разумно. Спасибо!

Profile

amarao: (Default)
amarao

February 2026

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

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

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