|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
24.05.2013, 18:11 | #1 |
Форумчанин
Регистрация: 02.12.2012
Сообщений: 250
|
Поиск файлов без рекурсии
Классический вариант с рекурсией примерно такой:
Код:
На Visual Basic есть код с использованием For Each folder in root.subfolders, а на с++ только рекурсия? |
24.05.2013, 18:37 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
Не обязательно рекурсией - можно сделать очередь и при посмотре одной папки добавляем новые в очередь и работаем пока очередь не закончится.
Глубину промостра можно делать той же рекурсией, просто добавив дополнительный аргумент счетчик глубины и если дойдем до конца, дальнейшие папки не просматриваются. |
24.05.2013, 20:24 | #3 |
Форумчанин
Регистрация: 13.08.2011
Сообщений: 184
|
Считай вложенность что мешает ? и чем рекурсия не угодила то ?
|
24.05.2013, 20:53 | #4 | |
Форумчанин
Регистрация: 02.12.2012
Сообщений: 250
|
В книгах по программированию пишут что рекурсию следует использовать только в крайних случаях т.к. это признак непрофессионализма. Почему так - хз, возможно из-за возможного зацикливания кусков программы.
Цитата:
|
|
24.05.2013, 22:05 | #5 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
calypso
Это рекурсия - не профессионализм? Не знаю, кто сейчас пишет книги по программированию, но немного раньше рекурсия преподносилась ближе к концу, либо в примерах повышенной сложности. На мой личный взгляд - удобнейшая вещь, без которой порой просто не обойтись. А откуда, простите, берутся папка.subfolders? Их на ухо Купидон нашёптывает? То, что БАСИЦ снял с программиста "тяжёлую ношу", ещё не значит, что он по-другому эти папки ищет... |
24.05.2013, 22:58 | #6 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Алгоритмы работы с древовидными структурами по природе своей рекурсивны. Можно извращаться и писать как-то по-другому, как, например с очередью посоветовали, но это будет достаточно искусственный прием и придется усложнить алгоритм. К примеру, каждый элемент очереди еще должен бы помнить свой собственный адрес, чтобы найти полный путь к нужному нам файлу. Рекурсивные алгоритмы в этой задаче гораздо более естественны и потому предпочтительны.
Быстрая сортировка, так всеми любимая, тоже рекурсивна. Другое дело, что надо знать, когда применять рекурсию, а когда не стоит. Не дай вам бог считать, например, числа Фибоначчи рекурсивно...
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
25.05.2013, 11:52 | #7 |
Пользователь
Регистрация: 23.08.2011
Сообщений: 55
|
Отвечаю многим почему рекурсия признак плохого алгоритма: при рекурсии происходит вызов функции, а при этом юзается статическая память (я не помню уже сколько) . А статики – килобайты, а не гигабайты как динамики. Уверенны что её хватит ?
Где-то читал, что любую рекурсию можно переделать под цикл.
"Пока бабка не смоет косметику, русский мужик не перекрестится" (C) Кто-то
|
25.05.2013, 12:10 | #8 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Можно и без рекурсии обойтись. Используйте stack из библиотеки VCL. Правда это более геморно чем, если использовать рекурсивный алгоритм.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
25.05.2013, 13:28 | #9 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
|
25.05.2013, 13:58 | #10 |
Пользователь
Регистрация: 23.08.2011
Сообщений: 55
|
При рекурсии юзается стек статической памяти (я точно не помню, но что-то около 64 килобайт; сравните с динамической, которой могут быть гигабайты).
"Пока бабка не смоет косметику, русский мужик не перекрестится" (C) Кто-то
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поиск файлов по маске и нахождения общего размера найденных файлов и вывод в терминал | Колямбий | Помощь студентам | 0 | 21.04.2013 21:31 |
C#.LINQ Генерация всех перестановок без рекурсии | Lasur | Помощь студентам | 2 | 08.04.2012 19:38 |
Рекурсивный поиск файлов в интервале дат(без времени,только день,месяц и год)) | AlexKhol | Общие вопросы Delphi | 3 | 04.02.2012 16:15 |
А нужно без рекурсии | Kazik | Общие вопросы Delphi | 1 | 22.05.2010 12:20 |
С помощью рекурсии без операторов цикла и перехода написать процедуру P(N) | WhyBeNormal | Помощь студентам | 1 | 29.01.2009 01:20 |