@kvaks

Почему рекурсия в java уходит в бесконечность?

Я только учусь в java, и решил сделать игру сапер, это функция проверки кол мин вокруг, в ней рекурсия, по отдельности каждый if работает, но пары по X или Y падают в ошибки.

static void getNumMine(int x, int y){

      if (!check(x,y)){
          int number = 0;
   
          if (x<9)      if (check(x+1,y)) number++; else getNumMine(x+1,y);
          if (y<9)      if (check(x,y+1)) number++; else getNumMine(x,y+1);
          if (x>0)      if (check(x-1,y)) number++; else getNumMine(x-1,y);
          if (y>0)      if (check(x,y-1)) number++; else getNumMine(x,y-1);

          main.box.setSum(x,y,number);

      }
    }
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
Vamp
@Vamp
Идеальная задачка для пошаговой отладки. Она есть в любой приличной IDE. Покажу на примере IDEA:

1. Ставьте на строчке, которую хотите отладить, так называемую точку прерывания (breakpoint).

5de7eb1ceef0b714535201.png

2. Запускайте программу в отладочном режиме.

5de7eb4300731205266204.png

3. Программа начнёт выполняться как обычно, но когда исполнение дойдёт до строки, помеченной breakpoint'ом, выполнение остановится и в дебаг окне отобразится текущий стек трейс, значения локальных переменных и самое важное для вашей проблемы - кнопки пошагового продолжения.

5de7ebd9dd5e7287922482.png(на скриншоте я уже проехал несколько шагов вперёд)

Вот эти 5de7ecb0c3d98348194703.png
Первая кнопка продвинет выполнение программы на одну строчку. Вторая сделает то же самое, но если в выполняемой строке вызывается какой-то метод, то отладка шагнёт внутрь метода и шаги продолжатся уже в теле вызываемого метода.

Выполняя отладку по шагам, вы будете точно представлять себе что происходит внутри программы и появится понимание откуда растут ноги у бага. Чем раньше вы освоите отладку в пошаговом режиме, тем проще будет в будущем.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы