Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Глубина стека (http://www.flasher.ru/forum/showthread.php?t=150058)

semenyakinVS 06.02.2011 01:14

В случаи с факториалом использование итерации это не решение университетской задачи. От вопрос быстродействия.

И, по-моему, код приведённый expl более понятен, чем рекурсивное решение.

Цитата:

А вообще, вот я писал рекурсивный обход дерева
Это хорошо, но у меня проблема в глубокой степени вложености.

mikhailk 06.02.2011 01:15

Цитата:

А вообще, вот я писал рекурсивный обход дерева
Для меня, применительно к AS3, обход деревьев - процесс изначально абсолютно непонятный. В других языках он был нужен для парсинга xml-данных, но в AS3... Не, реально не понимаю.

На всякий случай скажу, что я не защищаю рекурсию вообще. Я защищаю применение правильных инструментов для решения соответствующих задач.

КорДум 06.02.2011 01:19

Писал обход для построения вывода структуры трейсами. Без него тоже можно, я в теме той писал, как это делается. AS3 представляет уже готовые средства для всего этого, это понятно.

expl 06.02.2011 02:01

Цитата:

Это хорошо, но у меня проблема в глубокой степени вложености.
С параметром компиляции default-script-limits не прокатило?

Котяра 06.02.2011 02:29

Про факториал и рекурсии/выход из неё.
http://www.flasher.ru/forum/showpost...62&postcount=9

semenyakinVS 06.02.2011 02:50

Цитата:

Сообщение от Котяра (Сообщение 970822)
Про факториал и рекурсии/выход из неё.
http://www.flasher.ru/forum/showpost...62&postcount=9

ОМГ... Где вы думали хранить результат?

Добавлено через 1 минуту
Цитата:

Сообщение от expl (Сообщение 970811)
С параметром компиляции default-script-limits не прокатило?

Честно говоря - мне безумно стыдно - но я не знаю, что такое параметры компиляции и где их выставлять. Подскажете? Они помогут?

derhab 06.02.2011 10:26

Вложений: 1
В FD, к примеру
Вложение 25935
compiler options:
http://livedocs.adobe.com/flex/3/htm...pilers_14.html

expl 06.02.2011 14:30

Вложений: 1
Во FlashBuilder, до кучи:
Вложение 25936

semenyakinVS 06.02.2011 15:08

Цитата:

Сообщение от derhab (Сообщение 970862)
В FD, к примеру

Цитата:

Сообщение от expl (Сообщение 970879)
Во FlashBuilder, до кучи

Спасибо. Намотал на ус. А в CS5 IDE?

//-----------------------------------------------

По поводу сабжа... Проблему решил. Развернул рекурсию в итерацию, эмулировав стек.

Глянул вот это сегодня (странно, что пропустил до этого):
Цитата:

Сообщение от expl (Сообщение 970773)
Вы не поверите, но дерево можно обойти нерекурсивно. И даже произвольной конфигурации
http://www.petrsu.ru/Chairs/IMO/pasc...part2_1_7.html

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

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

1. Заходим в узел.
2. Если из него одна ветка, то идём по ней и ничего больше не делаем.
3. Если больше одной, то заносим узел в свой "стек" + заносим номер следующей ветки, по которой будем идти из этого узла, когда вернёмся в него (в начале =2).
4. Движемся вглубь дерева, пока ветки не null для очередного узла. Если null, то мы добрались до конца - возвращаемся к верхнему элементу стека. Берём из него следующий индекс (если в начале был 2, то теперь 3). Если он больше кол-ва веток для данного узла, вытесняем элемент из стека. После этого идём по ветке с индексом, который был до инкремента.
5. Делаем так пока, при необходимости возврата, не обнаружим, что "стек" пуст.

Алгоритм работает как для формирования дерева по какому-либо правилу (функции: дерево поиска, дерево геометрических разбиений), так и для обхода уже готового дерева. Разница лишь в том, что для первого случая мы будем формировать ветки по направлению, а во втором – идти по ним.

derhab 06.02.2011 16:31

Цитата:

Сообщение от semenyakinVS (Сообщение 970882)
А в CS5 IDE?

а в CS5 IDE, насколько я знаю, можно поменять только время ограничивающее выполнение скрипта. В настройках публикации, вкладка Flash, в самом низу.


Часовой пояс GMT +4, время: 02:55.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.