Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двунапрвленный линейный список, Двунапрвленный линейный список 
:(
    Опции темы
Annihilator
Дата 8.5.2008, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

Репутация: 1
Всего: 3



Цитата(JackYF @ 8.5.2008,  16:29)
Цитата(Annihilator @  8.5.2008,  02:36 Найти цитируемый пост)
А почему нельзя рекурсией??

Гланды можно через одно место вырвать, но зачем? smile зачем рекурсия там, где она не нужна. У рекурсии есть хороший недостаток - накладные расходы на вызовы по памяти, чего не скажешь про итеративные алгоритмы.

Тогда вопрос, где рациональнее будет использовать рекурсию. В деревьях?


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
baldina
Дата 8.5.2008, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



не понял, тебе нужен шаблонный двусвязный список или общий шаблонный интерфейс, который может быть реализован двусвязным списком или чем-нить еще?

Добавлено @ 13:40
Цитата

Тогда вопрос, где рациональнее будет использовать рекурсию

Это почти всегда нерационально. Но есть задачи (обход дерева, быстрая сортировка и т.д.) где использовать рекурсию проще, нагляднее, короче. Если рекурсивный алгоритм реализован, но неэффективен, его всегда можно переписать циклами.

Добавлено @ 13:42
почти все алгоритмы типа "разделяй и властвуй" просто и красиво реализуются рекурсией

Это сообщение отредактировал(а) baldina - 8.5.2008, 13:58
PM MAIL   Вверх
Любитель
Дата 8.5.2008, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(Annihilator @  8.5.2008,  13:37 Найти цитируемый пост)
Тогда вопрос, где рациональнее будет использовать рекурсию. В деревьях? 

Для рекурсивных структур (те же деревья), для алгоритмов с возвратом и пр. рекурсивная реализация выглядит проще. И для начала вполне сойдёт. Если будут проблемы с проивзодительностью (что в больших проектах лучше анализировать, конечно, нормальным профайлером) - любую рекурсию можно развернуть с помощью стека (иногда лучше использовать очередь, но суть та же).

Добавлено через 12 минут и 40 секунд
Есть понятие tail recursion ("хвостовая" рекурсия) - когда рекурсивный вызов происхоодит в самом конце. Типа:
Код

void printList(ListNode* node)
{
   printData(node->data);
   printList(node->next); // после _ничего_ нет
}


Точнее даже не обязательно именно в конце - важно, что результаты рекурсивного вызова не сказываются на операторах, следующих после рекурсивного вызова:
Код

void printList(ListNode* node)
{
   printData(node->data);
   printList(node->next);
   printf("%s", "End node printing");
}


"Хвостовая" рекурсия всегда разворачивается в обычный цикл (без использования стека).


--------------------
PM MAIL ICQ Skype   Вверх
JackYF
Дата 8.5.2008, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Любитель @  8.5.2008,  12:52 Найти цитируемый пост)
"Хвостовая" рекурсия всегда разворачивается в обычный цикл (без использования стека). 

на всех компиляторах и во всех языках? пруфлинк?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Любитель
Дата 9.5.2008, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Нет, я не про то smile Речь про другое - разворачивается (ручными средствами) в цикл без привлечения своего стека/очереди. Банальный вариант - заменить рекурсию переприсваиванием параметров и гоуту на начало функции. Как оптимизаторы компилеров действуют - это уже к докам по компилеру.


--------------------
PM MAIL ICQ Skype   Вверх
JackYF
Дата 9.5.2008, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Любитель @  8.5.2008,  23:19 Найти цитируемый пост)
разворачивается (ручными средствами)

Всё, я тебя понял smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
r18Romik
  Дата 12.5.2008, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 13.2.2008
Где: Пермь

Репутация: нет
Всего: нет



Люди всё таки кто нибудь может помочь...со структурой???
Читать выше.....
PM MAIL ICQ   Вверх
bsa
Дата 12.5.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(r18Romik @ 12.5.2008,  06:38)
Люди всё таки кто нибудь может помочь...со структурой???
Читать выше.....

Я тебе уже написал достаточно.
Впихнуть список вместо вектора просто невозможно, так как очень сильно отличаются способы хранения и доступа к элементам. Поэтому надо писать полностью заново, тем более, что это делается довольно легко.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0864 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.