Форум 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=193793)

Chum 01.02.2013 14:27

Вызов функции в самой функции.
 
Рылся недавно на одном из форумов и в одной из тем наткнулся на код C#:
Код:

static void fill(int n)
{
    for (int i = 0; i < 25; i++){
        if (!arrstr[i].use && n != 4 && n != 19 || n == 4 && i == 19 || n == 19 && i == 12)
        {
            arr[n] = arrstr[i].n;
            int s = arr[n - 1] + arr[n];
            if (s == 4 || s == 9 || s == 16 || s == 25 || s == 36 || s == 49)
            {
                arrstr[i].use = true;
                if (n < 24) fill(n + 1);
                else
                {
                    foreach (int a in arr) Console.Write("{0,3}", a);
                    Console.WriteLine();
                }
                if (n != 4 && n != 19) arrstr[i].use = false;
            }
        }
    }
}

Насколько я понял это объявление функции fill, но фишка в том что в теле объявления функции fill идёт вызов этой самой функции.
Вопрос: т.к. язык C# и AS3 C-подобны и весьма схожи в орфографии можно ли такие фишки использовать в AS3. При случае непременно опробую сам на практике, но хочется спросить у тех кто возможно использовал подобный приём.
Вообще это может походть на какой-то цикл ?

iflamberg 01.02.2013 14:31

Ребят, ну, блин, сядьте наконец и прочтите хоть одну книгу по основам программирования от корки до корки. А то элементарные вещи не знаете. Это называется рекурсия. Повсеместно используется в алгоритмах поиска по графу, сортировки и т.д.

СлаваRa 01.02.2013 14:32

рекурсия

caseyryan 01.02.2013 14:54

Цитата:

При случае непременно опробую сам на практике, но хочется спросить у тех кто возможно использовал подобный приём.
Вообще это может походть на какой-то цикл ?
А не проще ли было просто сделать простой тест, а не писать эту тему? Гораздо быстрее получилось бы.

Вообще, к слову, на счет новых плееров не знаю, не интересовался, но раньше на рекурсию были ограничения (хотя возможно не на рекурсию как таковую, а вообще на время выполения). Причем споры заходили разные, и не только здесь, но и на других форумах, какова же глубина. Кто-то говорил, что ограничение 2000 итераций? Я лично проводил множество тестов, и ни разу не получил схожих результатов. Когда-то ошибка вылетала на 2 с небольшим тысячах итераций, когда-то на 9, иногда на полутора тысячах, причем в одном и том же тесте. Возможно здесь дело только в ограничении времени выполнения скрипта, но 15 секунд он явно не работал, даже 5.
В общем, рекурсия может быть полезна, если ее не использовать бездумно везде где не попадя. Но там, где ее можно легко заменить циклом, лично я бы выбрал цикл.

iNils 01.02.2013 15:12

Цитата:

Сообщение от caseyryan (Сообщение 1118826)
Вообще, к слову, на счет новых плееров не знаю, не интересовался, но раньше на рекурсию были ограничения (хотя возможно не на рекурсию как таковую, а вообще на время выполения). Причем споры заходили разные, и не только здесь, но и на других форумах, какова же глубина. Кто-то говорил, что ограничение 2000 итераций? Я лично проводил множество тестов, и ни разу не получил схожих результатов. Когда-то ошибка вылетала на 2 с небольшим тысячах итераций, когда-то на 9, иногда на полутора тысячах, причем в одном и том же тесте. Возможно здесь дело только в ограничении времени выполнения скрипта, но 15 секунд он явно не работал, даже 5.

Из спецификации SWF (7 версия и выше)
Цитата:

The MaxRecursionDepth field sets the ActionScript maximum recursion limit. The default setting is 256 at the time of this writing. This default can be changed to any value greater than zero (0).
Максимум? Под это в swf отводится UI16, то есть 65535.
А время на лимит выполнение по умолчанию 15-20 (от платформы зависит), максимум опять же задается UI16 (как раз за MaxRecursionDepth)

Chum 01.02.2013 15:38

iflamberg: Насчёт элементарных вещей:
Цитата:

Продолжаю выкладывать WIP игрушки, над которой я работаю.
У каждого есть свои фишки на предмет элементарных вещей.

iflamberg 01.02.2013 16:01

И что там тебе показалось "элементарным"?

Chum 01.02.2013 16:18

Теперь уже ничего.

wvxvw 01.02.2013 16:46

iNils, По ходу эти настройки стали игнорироваться более современными плеерами примерно года два назад. Обычно рекурсия умирает просто когда стек исчерпан, а он исчерпается в зависимости от того, что будет в одном кадре стека и сколько система выделяет места под тред (возможно, так же, от того, сколько инстансов плеера существует одновременно). Вобщем, тема эта темная.

iNils 01.02.2013 16:48

Цитата:

Сообщение от wvxvw (Сообщение 1118842)
iNils, По ходу эти настройки стали игнорироваться более современными плеерами примерно года два назад. Обычно рекурсия умирает просто когда стек исчерпан, а он исчерпается в зависимости от того, что будет в одном кадре стека и сколько система выделяет места под тред (возможно, так же, от того, сколько инстансов плеера существует одновременно). Вобщем, тема эта темная.

Я всегда исходил из того, что глубина стека должна быть не более 256)


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

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