Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Общие вопросы о Flash (не затрагивающие ActionScript)

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 08.01.2006, 17:08
jflasher вне форума Посмотреть профиль Отправить личное сообщение для jflasher Найти все сообщения от jflasher
  № 1  
Ответить с цитированием
jflasher
 
Аватар для jflasher

Регистрация: Jan 2006
Сообщений: 7
Question Как понять: "функция вызывает сама себя"

Здравствуйте,
Читаю книгу по программированию во 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"

Старый 08.01.2006, 18:27
Antares вне форума Посмотреть профиль Найти все сообщения от Antares
  № 2  
Ответить с цитированием
Antares
Banned
 
Аватар для Antares

Регистрация: Dec 2003
Сообщений: 3,925
Очень просто: в теле функции происходит вызов ее же при определенном условии. Рекурсия -- основа основ программирования. Есть языки, в которых на рекурсии основано фактически все -- узкоспециализированные, но для ряда задач куда более мощные.

Судя по примеру ты создаешь игру "жизнь" Суть ее в том, что от каждой клетки надо ходить по всем направлениям, проверяя состояние этих клеток. это достигается путем вызова функции "обойти все клетки вокруг" последовательно из текущей функции, пока не встретим границу поля или условие остановки (если честно, я уже плохо помню правила).

Тут надо быть осторожным: более 256 рекурсивных вызовов компилятор Action Script сделать не позволит.

Старый 08.01.2006, 18:27
Antares вне форума Посмотреть профиль Найти все сообщения от Antares
  № 3  
Ответить с цитированием
Antares
Banned
 
Аватар для Antares

Регистрация: Dec 2003
Сообщений: 3,925
P.S. тэгом [ code ] пользуйся

Старый 09.01.2006, 13:20
jflasher вне форума Посмотреть профиль Отправить личное сообщение для jflasher Найти все сообщения от jflasher
  № 4  
Ответить с цитированием
jflasher
 
Аватар для jflasher

Регистрация: Jan 2006
Сообщений: 7
Цитата:
Сообщение от Antares
Очень просто: в теле функции происходит вызов ее же при определенном условии. Рекурсия --
...
Судя по примеру ты создаешь игру "жизнь"
...
Спасибо за объяснение.

Кстати, 'жизнь' я уже делал, только обошелся без рекурсии. Это был код из игры 'рекурсивные блоки' (создается сетка из разноцветных блоков, при нажатии на блок удаляется и он и его соседи, если они такого же цвета), правда, я не понимал, почему рекурсивные .

Старый 08.01.2006, 18:58
K.A.T.A.F.A.L.K.E.R вне форума Посмотреть профиль Отправить личное сообщение для K.A.T.A.F.A.L.K.E.R Найти все сообщения от K.A.T.A.F.A.L.K.E.R
  № 5  
Ответить с цитированием
K.A.T.A.F.A.L.K.E.R
 
Аватар для K.A.T.A.F.A.L.K.E.R

Регистрация: Jul 2005
Адрес: Go, Ukraine!
Сообщений: 787
Отправить сообщение для K.A.T.A.F.A.L.K.E.R с помощью ICQ
это называется рекурсией

Упс... опоздал


Последний раз редактировалось K.A.T.A.F.A.L.K.E.R; 08.01.2006 в 19:03.
Старый 08.01.2006, 19:08
Antares вне форума Посмотреть профиль Найти все сообщения от Antares
  № 6  
Ответить с цитированием
Antares
Banned
 
Аватар для Antares

Регистрация: Dec 2003
Сообщений: 3,925
Причем больше, чем на полчаса

Старый 08.01.2006, 19:16
K.A.T.A.F.A.L.K.E.R вне форума Посмотреть профиль Отправить личное сообщение для K.A.T.A.F.A.L.K.E.R Найти все сообщения от K.A.T.A.F.A.L.K.E.R
  № 7  
Ответить с цитированием
K.A.T.A.F.A.L.K.E.R
 
Аватар для K.A.T.A.F.A.L.K.E.R

Регистрация: Jul 2005
Адрес: Go, Ukraine!
Сообщений: 787
Отправить сообщение для K.A.T.A.F.A.L.K.E.R с помощью ICQ
Цитата:
Сообщение от Antares
Причем больше, чем на полчаса
нажал "ответить", потупил, ответил А можно как-то удалять мессагу в случае такой тупизны?

Создать новую тему Ответ Часовой пояс GMT +4, время: 03:35.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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