![]() |
Глубина стека
Есть алгоритм создания дерева. Произвольного.
Возникла необходимость вложености больше 255 на ветках. Как я понял, максимальная глубина стека в AS3 255... Как можно управлять стеком виртуальной машины и вообще, можно ли это? Добавлено через 2 минуты Вложеность может быть больше 255 - проверил. Но какая тогда максимальная глубина? |
Цитата:
|
Имеется в виду какой-нибудь факториал от 300? Я бы посоветовал вам разделить все это дело на несколько частей, каждая из которых не выходит за пределы стека. Мол, посчитать от 1 до 255, затем от 256 до 300 и перемножить эти результаты.
|
Цитата:
|
Вообще где-то было изменение максимального размера стека (что-то плохо гуглится), по крайней мере через изменение пары байт в скомпилированной swf-ке.
А вообще любой рекурсивный алгоритм можно свести к нерекурсивному, если для каждой переменной, хранившейся в стеке, создать массив. Ложить через pop(), доставать через push(). Переменных, общих для всех подвызовов функции, это, понятно, не касается. Читабельность, конечно, может ухудшится, а может и не очень. |
Цитата:
Пришлось ставить ограничитель. Типа, если за столько-то ходов никто никого не убил, сворачиваем баттл за отсутствием явного преимущества одной из сторон. |
Оказывается я не понял вопроса. Я почему-то подумал о вложенности объектов в DisplayList. Извините меня пожалуйста. )
|
Flash IDE вроде давал ввести свою глубину. Значит, можно.
|
Спасибо за ответы
Цитата:
Цитата:
Цитата:
Но за совет спасибо, хотя такой способ знал и сам. В крайнем случаи прибегну к нему… |
Цитата:
http://www.petrsu.ru/Chairs/IMO/pasc...part2_1_7.html Цитата:
|
Цитата:
|
Цитата:
Дерево тоже можно на части порубить и пробегаться кусками. |
Цитата:
http://help.adobe.com/en_US/flex/usi...9084-7a92.html Цитата:
Цитата:
P.S. В стеке вызовов насчитал 500 функций до падения - странно, но и что по умолчанию стоит на 255 не похоже |
Цитата:
a0 = 1 a(n+1) = a(n)*(n+1) Считать её деревом - безумие... Добавлено через 1 минуту Хотя нет, почти безумие. Для указанного в вашем комментарии факториала от 300 дерево может понадобиться для хранения результата. Тогда может быть нужным считать результат по веткам и суммировать в конце. Вы это имели в виду? Добавлено через 3 минуты Цитата:
Причем, в один из запусков глубина была 1302... Запуски, правда, были линейными. Неужели сама виртуалка разварачивает... По коду она этого понять не могла бы: там стоит цикл по кол-ву веток, просто в моём случаи ветка одна была для каждого уровня. |
Цитата:
|
Вообще не понимаю, откуда легенда, что факториал считается рекурсией - в бывшей моей конторе на собеседовании чел тоже что-то про факториал и рекурсию плёл
Код AS3:
|
Если это не обход дисплей-листа или прочих деревьев (хотя и их можно развернуть в цикл, просто не так элегантно будет выглядеть), то
Цитата:
|
Цитата:
Код AS3:
|
Цитата:
А вообще, вот я писал рекурсивный обход дерева: http://www.flasher.ru/forum/showthread.php?t=147050 ) |
Цитата:
В узких местах только от нее приходится избавляться. Про фаториал: Всётки эта классика не выглядит интуитивно понятной, но это ИМХО |
В случаи с факториалом использование итерации это не решение университетской задачи. От вопрос быстродействия.
И, по-моему, код приведённый expl более понятен, чем рекурсивное решение. Цитата:
|
Цитата:
На всякий случай скажу, что я не защищаю рекурсию вообще. Я защищаю применение правильных инструментов для решения соответствующих задач. |
Писал обход для построения вывода структуры трейсами. Без него тоже можно, я в теме той писал, как это делается. AS3 представляет уже готовые средства для всего этого, это понятно.
|
Цитата:
|
Про факториал и рекурсии/выход из неё.
http://www.flasher.ru/forum/showpost...62&postcount=9 |
Цитата:
Добавлено через 1 минуту Цитата:
|
Вложений: 1
В FD, к примеру
Вложение 25935 compiler options: http://livedocs.adobe.com/flex/3/htm...pilers_14.html |
Вложений: 1
Во FlashBuilder, до кучи:
Вложение 25936 |
Цитата:
Цитата:
//----------------------------------------------- По поводу сабжа... Проблему решил. Развернул рекурсию в итерацию, эмулировав стек. Глянул вот это сегодня (странно, что пропустил до этого): Цитата:
Задачу решил вчера ночью и хотя решение, можно сказать, является обобщением алгоритма, ссылку на который дал expl, но было придумано независимо от него: 1. Заходим в узел. 2. Если из него одна ветка, то идём по ней и ничего больше не делаем. 3. Если больше одной, то заносим узел в свой "стек" + заносим номер следующей ветки, по которой будем идти из этого узла, когда вернёмся в него (в начале =2). 4. Движемся вглубь дерева, пока ветки не null для очередного узла. Если null, то мы добрались до конца - возвращаемся к верхнему элементу стека. Берём из него следующий индекс (если в начале был 2, то теперь 3). Если он больше кол-ва веток для данного узла, вытесняем элемент из стека. После этого идём по ветке с индексом, который был до инкремента. 5. Делаем так пока, при необходимости возврата, не обнаружим, что "стек" пуст. Алгоритм работает как для формирования дерева по какому-либо правилу (функции: дерево поиска, дерево геометрических разбиений), так и для обхода уже готового дерева. Разница лишь в том, что для первого случая мы будем формировать ветки по направлению, а во втором – идти по ним. |
Цитата:
|
а вот и нет, а вот и нет :)
можно написать для главного класса в метатеге [SWF] все параметры, какие нужно, включая ширину, высоту, фпс, цвет фона, лимит по времени и лимит по стеку. Возможно это не все, но я пока только про такие знаю. Добавлено через 5 минут http://help.adobe.com/en_US/flex/usi...19d46bcb4-8000 |
да, но вопрос был про CS5 IDE:)
|
И что? Вы имеете ввиду как это "в кадре" написать, а не в классе?
|
главное, что можно, а не то, что нет такой вкладки :)
|
да и вообще речь шла о CS5 IDE и я так понял, что интересует вариант компиляции родным флэшевским компилятором и управление его параметрами, так что метатеги тут не катят
блин, случайно удалил предыдущее свое сообщение) но неважно, и так все понятно вроде с этим.. |
Цитата:
|
[SWF] метатег он прекрасно поддерживает. Если б это было не так, то я бы тут не писал.
|
странно, не ругается, но и изменений никаких... что я делаю не так?
Код AS3:
Добавлено через 2 минуты все, отбой, получилось, был неправ) точка с запятой после тэга) |
| Часовой пояс GMT +4, время: 02:52. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.