![]() |
Как понять: "функция вызывает сама себя"
Здравствуйте,
Читаю книгу по программированию во flash. Я не могу понять: как функция вызывает сама себя, что в таком случае происходит? Вот пример такой функции (я не прошу разбираться в коде, разберу его конечно же я сам): function testNeighbor(x,y,c) { if (_root["block "+x+" "+y]._currentframe == c) { // remove neighbor _root["block "+x+" "+y].gotoAndStop(5); var n = 1; // test all of these neighbors n += testNeighbor(x-1,y,c); n += testNeighbor(x+1,y,c); n += testNeighbor(x,y-1,c); n += testNeighbor(x,y+1,c); // return number of matches found return(n); } else { // no match found return(0); } } // Из книги Г. Розенцвейга "Flash MX. Создание игр с помощью AS" |
Очень просто: в теле функции происходит вызов ее же при определенном условии. Рекурсия -- основа основ программирования. Есть языки, в которых на рекурсии основано фактически все -- узкоспециализированные, но для ряда задач куда более мощные.
Судя по примеру ты создаешь игру "жизнь" :) Суть ее в том, что от каждой клетки надо ходить по всем направлениям, проверяя состояние этих клеток. это достигается путем вызова функции "обойти все клетки вокруг" последовательно из текущей функции, пока не встретим границу поля или условие остановки (если честно, я уже плохо помню правила). Тут надо быть осторожным: более 256 рекурсивных вызовов компилятор Action Script сделать не позволит. |
P.S. тэгом [ code ] пользуйся
|
это называется рекурсией
Упс... опоздал :( :) |
Причем больше, чем на полчаса
|
Цитата:
|
Цитата:
Кстати, 'жизнь' я уже делал, только обошелся без рекурсии. Это был код из игры 'рекурсивные блоки' (создается сетка из разноцветных блоков, при нажатии на блок удаляется и он и его соседи, если они такого же цвета), правда, я не понимал, почему рекурсивные :). |
| Часовой пояс GMT +4, время: 03:27. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.