![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Jan 2006
Сообщений: 7
|
Здравствуйте,
Читаю книгу по программированию во 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" |
|
|||||
|
Banned
Регистрация: Dec 2003
Сообщений: 3,925
|
Очень просто: в теле функции происходит вызов ее же при определенном условии. Рекурсия -- основа основ программирования. Есть языки, в которых на рекурсии основано фактически все -- узкоспециализированные, но для ряда задач куда более мощные.
Судя по примеру ты создаешь игру "жизнь" Суть ее в том, что от каждой клетки надо ходить по всем направлениям, проверяя состояние этих клеток. это достигается путем вызова функции "обойти все клетки вокруг" последовательно из текущей функции, пока не встретим границу поля или условие остановки (если честно, я уже плохо помню правила).Тут надо быть осторожным: более 256 рекурсивных вызовов компилятор Action Script сделать не позволит. |
|
|||||
|
Banned
Регистрация: Dec 2003
Сообщений: 3,925
|
P.S. тэгом [ code ] пользуйся
|
|
|||||
|
Регистрация: Jan 2006
Сообщений: 7
|
Цитата:
Кстати, 'жизнь' я уже делал, только обошелся без рекурсии. Это был код из игры 'рекурсивные блоки' (создается сетка из разноцветных блоков, при нажатии на блок удаляется и он и его соседи, если они такого же цвета), правда, я не понимал, почему рекурсивные . |
|
|||||
|
это называется рекурсией
Упс... опоздал ![]() Последний раз редактировалось K.A.T.A.F.A.L.K.E.R; 08.01.2006 в 19:03. |
|
|||||
|
Banned
Регистрация: Dec 2003
Сообщений: 3,925
|
Причем больше, чем на полчаса
|
|
|||||
|
Цитата:
А можно как-то удалять мессагу в случае такой тупизны? ![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:35. |
|
|
« Предыдущая тема | Следующая тема » |
|
|