![]() |
увеличить глубину рекурсии
Как увеличить глубину рекурсии? В качестве примера можно юзать такой код:
Код AS1/AS2:
|
Цитата:
|
Прервать и продолжить?
|
Цитата:
Цитата:
Что-то типа: Код AS1/AS2:
|
Код AS1/AS2:
|
__etc, а какой смысл в проверке внутри функции глубины рекурсии? Ведь все равно рано или поздно придется применять задержку. Или с точки зрения работоспособности (или какой другой) это имеет смысл, не смотря на затрачиваемые на это ресурсы?
|
Смысл в преодолении лимита и всё.
|
Глубина рекурсии байтом отдельным задается во флешке, в мануале к flasm (FLash ASseMbler) можно найти описание. Если очень хочется - делаем незапакованную свф, меняем байт, пакуем. А в CS4 уже в настройках публикации можно задавать. Но глубина рекурсии под 1000 это жесть, обычно можно написать эффективнее без нее.
|
DarkLight, я в цс4 искал, но что-то не нашел. Ткните, пожалуйста, носом невнимательного.
Flasm - интересная тема, надо почитать. |
Цитата:
Ваще автор, зачем Вам это? Ваше творение при таком раскладе скушает все ресурсы, нужно делать, если что, хвостовую рекурсию и уходить с глубины всеми возможными способами. |
DarkLight, ты не путаешь глубину рекурсии с настройками таймаута в CS4?
|
aksios, программу создаю, там реализовать рекурсией гораздо проще, чем циклами (как по мне, может и ошибаюсь). И вообще чем так плоха рекурсия?
Вот к примеру. Мне нужно обработать переменную в цикле относительно нескольких величин, т.е. по логике я должен создать цикл в цикле (а то и несколько ступеней вложенности) - флеш при этом однозначно повесится (возможно не на долго, но факт перегрузки есть), а в случае с использованием рекурсии все это решается более спокойно (хотя по времени может и дольше, но без подвисания компа). Вот и возникает вопрос: когда лучше рекурсия, а когда цикл? Кстати, в моем примере достаточно сложная система обработки переменных, поэтому выбрал рекурсию (хотя наверное можно было бы попробовать и циклом). Кстати о ресурсах - я частично уже написал, а если говорить о вышеуказанном коде, так там хоть 5000 итераций - субъективно будет практически без задержек. |
Цитата:
|
Лучше тогда, когда это красивее выглядит, и более важно - быстрее бегает.
Кстати, а почему при рекурсии компьютер повеситься, а при циклах будет бегать быстрее? Цитата:
Хотя, циклы пожалуй выйграют, ибо область поиска переменных у них будет более ближняя (они будут локальны) и будут быстрее обращаться, чем к функции, которая не локальна. Хотя, можно сделать на неё ссылку, но не факт, что поможет. Надо на досуге проверить) |
Psycho Tiger и уважаемая публика...
Предлагаю 2 варианта кода, по сути делающих одно и то же: вывод мувика из библиотеки на основную сцену. В библиотеке мувик (просто квадрат) с Linkage "quad". Код с применением цикла: Код AS1/AS2:
Код с применением рекурсии (и задержки для обхода лимита ее глубину) Код AS1/AS2:
Исходя из вышесказанного остановлюсь все же на рекурсии (т.к. не думаю что пользователь будет рад полному подвисанию системы, даже в ущерб скорости). Если у кого будут другие мнения и/или доводы - с удовольствием выслушаю. |
С тем же успехом можно было прогонять пачками циклы с интервалом, не забивая память рекурсиями.
|
Цитата:
Upd. Перепроверил - при рекурсии функция пересоздается (по крайней мере таковы результаты трэйса), так что не понятно чем тогда будет забиваться память. Если можно - поподробней по данной теме. |
Память забивается стеком вызовов и локальными переменными, из значениями и областями видимости, очевидно же.
|
Всем спасибо за внимание, все понятно.
Upd. Вот стало интересно с Flasm-ом немного поиграться, интересно ж... Наваял такой незатейливый код: Код AS1/AS2:
Код:
C:\Flasm>flasm -d rec.swf > rec.flmКод:
movie 'rec.swf' compressed // flash 9, total frames: 1, frame rate: 12 fps, 550x400 pxЗЫ. и я так понимаю, что под ас3 прога работать не будет? |
Цитата:
|
Глубина рекурсии указана в теге ScriptLimits (65), максимум можно указать 65 535.
з. Ы. flasm с AS3 не работает. |
Вопрос решен, все работает как надо, полет нормальный. Еще раз спасибо всем поучаствовавшим. Думаю, что тему можно считать закрытой.
|
| Часовой пояс GMT +4, время: 15:15. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.