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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2011, 19:13   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
тут я не соглашусь! с чего это, Ваши аргументы??
зато рекурсия может сорвать стек(точнее переполнить)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.07.2011, 19:22   #12
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
зато рекурсия может сорвать стек(точнее переполнить)
тут не поспоришь, но это если под ДОС (где 64кб на стек), то конечно переполнить можно легко, но под win32 (тем более 64 битные ОС) это будет сложно (при правильном построении алгоритма конечно же)
|{ot вне форума Ответить с цитированием
Старый 29.07.2011, 19:57   #13
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

стек вообще то не определяется всей свободной памятью.

тем более вы уверены что рекурсия здесь необходима?
может стоит просто цикл применить?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.07.2011, 21:32   #14
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Цитата:
Сообщение от |{ot Посмотреть сообщение
тут я не соглашусь! с чего это, Ваши аргументы??
Если текст будет порядка нескольких мегабайт, с огромным количеством тегов, то вы представляете сколько раз нужно будет вызвать подпрограмму? А сколько будет лишних операций со стеком? Алгоритмы, в которых применена рекурсия, обычно работают намного медленнее их безрекурсионных аналогов. Причем это бывает критично. Вообще, советовал бы не использовать рекурсии без необходимости. Про принцип KISS не стоит забывать.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 31.07.2011, 19:16   #15
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
стек вообще то не определяется всей свободной памятью.

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

Можно и цикл конечно же, тут больше дело вкуса, но так же, при помощи рекурсии можно легко и быстрее программировать довольно сложные алгоритмы (не все конечно)

Цитата:
Если текст будет порядка нескольких мегабайт, с огромным количеством тегов, то вы представляете сколько раз нужно будет вызвать подпрограмму? А сколько будет лишних операций со стеком? Алгоритмы, в которых применена рекурсия, обычно работают намного медленнее их безрекурсионных аналогов. Причем это бывает критично. Вообще, советовал бы не использовать рекурсии без необходимости. Про принцип KISS не стоит забывать.
Я не фанат рекурсии, но если ее грамотно построить, можно выиграть не только во времени построения алгоритма и его реализации..
  • Вызов функции занимает не так уж и много команд процессора, параметры рекурсивной функции так же сводятся к минимуму

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

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

    что если их нужно хранить так же и в цикле, то это те же операции со стеком что и в рекурсии

  • ...

У рекурсивного и не рекурсивного решения свои плюсы и минусы, каждые для различных целях хороши..

Но конкретно я бы наверное все же рекурсивно эту задачу решал.

PS: к примеру если есть некоторая 2х мерная матрица (маска для изображения) и необходимо выделить из нее все закрытые контуры из единичек, то рекурсивно тут все довольно просто, а вот через цикл, даже не представляю насколько будет огромный алгоритм с множеством условий...

А в некоторых языках программирования вообще отсутствуют циклы, рекурсия там это единственных выход (для чего тогда создатели так извратились, если рекурсия настолько плоха??)
|{ot вне форума Ответить с цитированием
Старый 01.08.2011, 05:26   #16
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Смотря как еще использовать рекурсию. Если создавать из строки подстраку из под подстраки подподстроку из подподстроки подподподстроку и тд... то это очень много памяти будет сжирать.
А вот есть не создавать подстрок, а создавать только указатели на начало и конец подстроки и передавать их в рекурсивные алгоритмы, то всё будет хорошо без расходов лишней памяти.
An1ka вне форума Ответить с цитированием
Старый 01.08.2011, 16:40   #17
Lindemann66
Форумчанин
 
Регистрация: 28.02.2011
Сообщений: 127
По умолчанию

Цитата:
Сообщение от An1ka Посмотреть сообщение
А вот есть не создавать подстрок, а создавать только указатели на начало и конец подстроки и передавать их в рекурсивные алгоритмы, то всё будет хорошо без расходов лишней памяти.
Это правильно, нужно будет запомнить)
Но у меня в алгоритме всё равно нет рекурсии, потому что, при больших объёмах текста, это, ИМХО всё же будет медленнее чем цикл
Lindemann66 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
mail.ru parser SAMY93 Работа с сетью в Delphi 7 09.08.2010 12:53
php2xls com parser crazy horse PHP 0 08.10.2009 09:02
HTML Parser на Delphi 2009 Rubaka Работа с сетью в Delphi 3 11.08.2009 08:35