Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2016, 20:59   #1
polsovatel
Пользователь
 
Регистрация: 21.09.2016
Сообщений: 13
По умолчанию Рекурсивная задачка

У нас есть шахматное поле, конь, стоящий на
позиции [1, 1]. Узнать, сможет ли конь за количество ходов N достичь поля [8, 8] .


Мой код:
Код:
    class Program
    {
        static void Main(string[] args)
        {
            int N;
            int i = 1;
            int j = 1;
            bool ans;

            Console.WriteLine("Введите количество ходов N: ");
            N = int.Parse(Console.ReadLine());

            ans = recursion(N, i, j);

            if (ans == true)
                Console.WriteLine("Да");
            else
                Console.WriteLine("Нет");

            Console.ReadKey();
        }

        static bool recursion(int N, int i, int j)
        {
            if (N <= 0 && i != 8 && j != 8)
                return false;
            if (N >= 0 && i == 8 && j == 8)
                return true;
            return (recursion(N - 1, i + 1, j + 2) || recursion(N - 1, i + 2, j + 1))
                || (recursion(N - 1, i - 1, j - 2) || recursion(N - 1, i - 2, j - 1));
         }
    }
}
Выдает такую ошибку: Process is terminated due to StackOverflowException.
Подскажите как исправить

Последний раз редактировалось Аватар; 28.09.2016 в 09:21.
polsovatel вне форума Ответить с цитированием
Старый 28.09.2016, 09:08   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

если мы исчерпали лимит ходов (N<0) то ВЫХОДИМ(завершаем рекурсию) всегда, независимо от текущей позиции(i,j).
Код:
  N  i  j
---------
  2  0  0 
  1  1  2
  0  0  0 --число попыток исчерпано, НО мы не попали на место и ... 
 -1  1  2
 -2  0  0
 -3  1  2
... бесконечный цикл => когда стек заполнится stackOverflow
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 28.09.2016 в 09:14.
evg_m вне форума Ответить с цитированием
Старый 28.09.2016, 13:36   #3
polsovatel
Пользователь
 
Регистрация: 21.09.2016
Сообщений: 13
По умолчанию

Спасибо. Разобрался
polsovatel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ Рекурсивная функция Trinity13 Помощь студентам 10 15.10.2017 13:21
рекурсивная функция С++ Zapt1k Помощь студентам 7 05.06.2013 13:44
Си.Рекурсивная функция Alina111 Visual C++ 1 01.07.2012 03:27
Рекурсивная сортировка бургер Паскаль, Turbo Pascal, PascalABC.NET 0 18.05.2010 16:09