Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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


Ответ
 
Опции темы
Старый 06.10.2014, 13:52   #1
marenko.lilia
Пользователь
 
Аватар для marenko.lilia
 
Регистрация: 25.12.2013
Сообщений: 91
Вопрос Рекурсия (вопрос к программистам с опытом)

Подскажите, попадались ли вам задачи, которые решить без рекурсии сложно? Такие , что вы подумали - "Нет - тут лучше не цикл, а рекурсию реализовать".
Когда её вообще выгодно применять?
Или же лучше использовать обычные итерации циклов?
Это же и быстрее и памяти меньше займет.
marenko.lilia вне форума Ответить с цитированием
Старый 06.10.2014, 14:52   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,664
По умолчанию

Цитата:
попадались ли вам задачи, которые решить без рекурсии сложно? Такие , что вы подумали - "Нет - тут лучше не цикл, а рекурсию реализовать".
Всё, что связано с древовидной организацией данных: поиск файлов на диске, работа с XML, реестром windows и т.п. - без рекурсии ваще никак.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 06.10.2014, 15:09   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Цитата:
и т.п. - без рекурсии ваще никак.
Ну почему же никак? Можно, но сложнее. Впрочем сложность при работе с циклами в таком случае увеличивается экспоненциально, поэтому лучше конечно рекурсией.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.10.2014, 15:15   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,664
По умолчанию

Дадада, ты прав, ты прав. Узбагойзя.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 06.10.2014, 15:44   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию


раздватри.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.10.2014, 16:06   #6
pproger
C++ hater
СуперМодератор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,337
По умолчанию

Цитата:
Сообщение от marenko.lilia Посмотреть сообщение
Подскажите, попадались ли вам задачи, которые решить без рекурсии сложно? Такие , что вы подумали - "Нет - тут лучше не цикл, а рекурсию реализовать".
Когда её вообще выгодно применять?
Или же лучше использовать обычные итерации циклов?
Это же и быстрее и памяти меньше займет.
как правильно сказали - все что связано с деревьями (например обход) решается рекурсией намного проще.

за примером далеко ходить не надо: задача о ханойской башне с помощью рекурсии решается в 3 строки, когда линейный алгоритм будет на порядок объемнее (да и более сложен для понимания, не говоря уже о реализации).
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 06.10.2014, 19:33   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,267
По умолчанию

Стек обычно меньше кучи, так что если рекурсия глубокая может будет проще через очередь, хотя это в принципе та же рекурсия, хотя наверно лучше/легче распараллеливается.
waleri вне форума Ответить с цитированием
Старый 06.10.2014, 21:53   #8
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,273
По умолчанию

Попадалась хорошая статья про рекурсию. Там и задача о "Ханойской башне" есть, и ещё задачки на тренировку внизу статьи: ссылка

У меня лично на практике пока не было таких ситуаций
8Observer8 вне форума Ответить с цитированием
Старый 06.10.2014, 22:53   #9
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,540
По умолчанию

Цитата:
Сообщение от marenko.lilia Посмотреть сообщение
Подскажите, попадались ли вам задачи, которые решить без рекурсии сложно?
Попадались такие, что без рекурсии получалось некрасиво и непонятно потом разбираться.
Цитата:
Сообщение от marenko.lilia Посмотреть сообщение
Такие , что вы подумали - "Нет - тут лучше не цикл, а рекурсию реализовать".
Не люблю рекурсию со времён первого попадания на переполнение стэка
Цитата:
Сообщение от marenko.lilia Посмотреть сообщение
Когда её вообще выгодно применять?
Когда красота кода дороже всего остального или когда рекурсия хвостовая.
Цитата:
Сообщение от marenko.lilia Посмотреть сообщение
Или же лучше использовать обычные итерации циклов?
Это же и быстрее и памяти меньше займет.
Да. Лучше использовать обычные циклы.
pu4koff вне форума Ответить с цитированием
Старый 07.10.2014, 21:32   #10
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от marenko.lilia Посмотреть сообщение
Или же лучше использовать обычные итерации циклов?
Это же и быстрее и памяти меньше займет.
В ситуациях, когда запилить цикл - легко и просто, обычно так и делают.

А вот в ситуации, когда просится рекурсия, попытка заменить её на цикл приведет к тому, что решение будет работать и медленнее, и памяти сожрет больше.

Последний раз редактировалось _Bers; 08.10.2014 в 08:15.
_Bers вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме от 7000 рублей в месяц



Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оценка создания сайта(вопрос ПРОграммистам) sokk Фриланс 9 15.10.2013 19:30
вопрос всем программистам ___________ JonnyTommy Помощь студентам 0 23.03.2012 22:21
Поделитесь опытом ... gefest58 Свободное общение 17 08.01.2011 15:58


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Скидки на курсы GeekBrains 40%, выбирайте программу для себя