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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2009, 00:14   #1
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию Косяки с развосьмеряющейся рекурсией.

Код:
void magichorse(int dir)
{
  for(int i=0; i<8;++i) 
       magichorse(i);
}
Тоесть выполняется всегда нулевая веточка - "вглубь".

Как сделать последовательное выполнение, тоесть что-бы последовательно выполнялись вызовы из одной функции. Тоесть идти "слоями".

С точки зрения логики вроде всё просто. А вот с реализацией я завис.
jojahti вне форума Ответить с цитированием
Старый 13.09.2009, 02:42   #2
Diego25
Новичок
Джуниор
 
Регистрация: 13.09.2009
Сообщений: 1
По умолчанию

Код:
void magichorse(int dir)
{
  for(; dir<8;++dir) 
       magichorse(dir);
}
Попробуй так но я не уверен).
Diego25 вне форума Ответить с цитированием
Старый 13.09.2009, 10:10   #3
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

Diego25
Неа - один фиг.

Забавно. Цикл фор и так можно написать.

Можно ещё, как пучкоф предложил, ограничить глубину.
jojahti вне форума Ответить с цитированием
Старый 13.09.2009, 11:41   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Сообщение от Diego25 Посмотреть сообщение
Код:
void magichorse(int dir)
{
  for(; dir<8;++dir) 
       magichorse(dir);
}
Попробуй так но я не уверен).
может такое ?

Код:
void magichorse(int dir)
{
  for(; dir<8;++dir) 
       magichorse(++dir);
}
counter вне форума Ответить с цитированием
Старый 13.09.2009, 12:03   #5
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Цитата:
Как сделать последовательное выполнение, тоесть что-бы последовательно выполнялись вызовы из одной функции. Тоесть идти "слоями".
Так слоями?
Код:
void func(int dir, int in_depth)
{
  // do something

  if (in_depth == 0) return;

  for(; dir<8;++dir) 
       func(dir, 0);

  for(; dir<8;++dir) 
       func(dir, 1);
}
void magichorse(int dir)
{
  func(dir, 1);  
}
Если нет, тогда объясни подробнее, как необходимо.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 13.09.2009, 12:07   #6
vasek123
Заблокирован
 
Регистрация: 21.11.2008
Сообщений: 4,986
Сообщение

А если попробовать следующее:

Код:
int magichorse(int dir)
{
   for(; dir<8; ++dir)
    return magichorse(dir);
}
То есть прописать функцию, которая, будет возвращать значение...
vasek123 вне форума Ответить с цитированием
Старый 13.09.2009, 14:46   #7
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

По моему в этой задаче проще обойтись без рекурсии:
Код:
void magichorse(int);

void func()
{
     for(int i=0;i<8;++i)
          magichorse(i);
}

void magichorse(int dir)
{
//Тело функции
}
Ну а если надо поизвращаться с рекурсией, можно попробовать так
Код:
void magichorse(int dir)
{
     static bool flag=1;
     if(!flag)
     {
          //Нужный рекурсивный код
          //вставить сюда
          return;
     }

     flag=0;
     for(int i=0;i<8;++i) 
       magichorse(i);
}
Ну как-то так. Если не подходит - поясните задание
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 13.09.2009, 17:33   #8
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

Blade
Цитата:
По моему в этой задаче проще обойтись без рекурсии:
Неа, коняшка должна развосьмеряться развосьмеряющимися коняшками.

Цитата:
Ну а если надо поизвращаться с рекурсией, можно попробовать так
Ну да, примерно так я и сделал, только проще. Хм. То есть вообще не так. Поставил счётчик, что бы рекурсия не бежала по одной ветке, а пробегала все поочереди. )

Вот только теперь коняшкам нужен двухмерный вектор. х_х

Последний раз редактировалось jojahti; 13.09.2009 в 17:40.
jojahti вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с рекурсией agarum Общие вопросы Delphi 2 19.06.2009 00:28
Маленькие косяки в курсовой Liver Помощь студентам 2 22.05.2009 12:35
Косяки с правой кнопкой мыши joker Общие вопросы Delphi 4 12.11.2008 13:25
Косяки со вставкой в эдит joker Общие вопросы Delphi 1 14.09.2008 09:00
косяки с RegQueryValueEx joker Win Api 12 04.04.2008 17:06