![]() |
|
||||||||||
|
|||||
|
Есть вот такая рекурсивная функция (находит все кубики фигуры)
function func(i, j) {
//1
if (pu["kubik"+(i+1)+j] && !pu["proverka"+(i+1)+j]) {
pu.attachMovie("proverka", "proverka"+(i+1)+j, numb++, {_x:(i+1)*20, _y:j*20});
func(i+1, j);
} else {
z++;
}
//2
if (pu["kubik"+i+(j+1)] && !pu["proverka"+i+(j+1)]) {
mas_proverka.push([i, j]);
func(i, j+1);
} else {
z++;
}
//3
if (pu["kubik"+(i-1)+j] && !pu["proverka"+(i-1)+j]) {
pu.attachMovie("proverka", "proverka"+(i-1)+j, numb++, {_x:(i-1)*20, _y:j*20});
func(i-1, j);
} else {
z++;
}
//4
if (pu["kubik"+i+(j-1)] && !pu["proverka"+i+(j-1)]) {
pu.attachMovie("proverka", "proverka"+i+(j-1), numb++, {_x:i*20, _y:(j-1)*20});
func(i, j-1);
} else {
z++;
}
//в коде ниже вся проблема
if (z == 4) {
trace("Вроде все...");
z = 0;
}
}
Она работает все нормально, но тут предо мной стала задача: найти момент когда последний объект активации выполняется и функция «останавливается». Так как я попытался заделать – плохо! Т.к. условий может уже и нет для вызова func, но в стеке наверное что-то еще осталось… |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Хм, как ты думаешь, названия переменных "pu", "numb", "func" кому-нибудь о чём-нибудь говорят, кроме создателя?
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
i и j максимальные ты же знаешь... Ну вот когда будут максимальными, значит кончилось....
|
|
|||||
|
[+1 10.07.06]
Регистрация: Jan 2003
Сообщений: 365
|
Когда заходишь в функцию рекурсию увеличивай на 1 какой-нить счетчик, когда выходишь - уменьшай. Когда этот счетчик снова будет = 0, значит всё кончилось (если правильно вообще понял суть алгоритма).
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Цитата:
|
|
|||||
|
[+1 10.07.06]
Регистрация: Jan 2003
Сообщений: 365
|
var countRecurse:Number = 0;
function func(i, j) {
countRecurse++;
//1
if (pu["kubik"+(i+1)+j] && !pu["proverka"+(i+1)+j]) {
pu.attachMovie("proverka", "proverka"+(i+1)+j, numb++, {_x:(i+1)*20, _y:j*20});
func(i+1, j);
} else {
z++;
}
//2
if (pu["kubik"+i+(j+1)] && !pu["proverka"+i+(j+1)]) {
mas_proverka.push([i, j]);
func(i, j+1);
} else {
z++;
}
//3
if (pu["kubik"+(i-1)+j] && !pu["proverka"+(i-1)+j]) {
pu.attachMovie("proverka", "proverka"+(i-1)+j, numb++, {_x:(i-1)*20, _y:j*20});
func(i-1, j);
} else {
z++;
}
//4
if (pu["kubik"+i+(j-1)] && !pu["proverka"+i+(j-1)]) {
pu.attachMovie("proverka", "proverka"+i+(j-1), numb++, {_x:i*20, _y:(j-1)*20});
func(i, j-1);
} else {
z++;
}
countRecurse--;
//в коде ниже вся проблема
if (z == 4 && countRecurse == 0) {
trace("Вроде все...");
z = 0;
}
}
|
![]() |
![]() |
Часовой пояс GMT +4, время: 18:40. |
|
|
« Предыдущая тема | Следующая тема » |
|
|