задали задачку про рекурсию, не могу понять до конца как она работает :)
есть функция, которая состоит из 4-х if-else условий, если одно из них true, то функция зовёт сама себя, если все false, то функция возвращает то, что она сделала в обратную сторону :) другими словами, при каждом true создаётся новая координата (объект ходит по лабиринту), и если он заходит в тупик, то начинает «идти» обратно. Я не пойму как мне выйти из тупика (отойти до определённого фрейма в стеке), и пойти «дальше», но уже в другом направлении, а не отматывать всё до самого начала.
функция проверяет «куда можно пойти» последовательно: «влево, вниз, вправо, вверх»;
примерный код:
void go(int x, int y) {
Coordinate currentCoordinate = new Coordinate(x, y);
показатьГрафику();
thereIsWall(x -= 1, y); // возвращает boolean, если -один влево по оси Х стена;
thereIsMe(x, y); //возвращает boolean, если мы там уже были
if (wall != true && me != true) {
route.addOneAfterRow(currentCoordinate);
идём(x, y);
go(x, y); // зовём функцию по новой
стереть(x += 1, y); // стереть когда будет return;
} else {
wall = false;
me = false;
x += 1;
thereIsWall(x, y += 1);
thereIsMe(x, y);
if (wall != true && me != true) {
route.addOneAfterRow(currentCoordinate);
идём(x, y);
go(x, y);
стереть(x, y -= 1);
} else {
wall = false;
me = false;
y -= 1;
thereIsWall(x += 1, y);
thereIsMe(x, y);
if (wall != true && me != true) {
route.addOneAfterRow(currentCoordinate);
идём(x, y);
go(x, y);
стереть(x -= 1, y);
} else {
wall = false;
me = false;
x -= 1;
thereIsWall(x, y -= 1);
thereIsMe(x, y);
if (wall != true && me != true) {
route.addOneAfterRow(currentCoordinate);
идём(x, y);
go(x, y);
стереть(x, y -= 1);
} else {
wall = false;
me = false;
System.out.printf("no way, looping back...\n"); // тут что делать, чтобы отойти до того места, где был ещё один wall !=true && me != true, но мы его пропустили из-за последовательности влево-вниз-вправо-вверх!?...
return;
}
}
}
}
}