|
|
|
Рекурсивный вывод директорий
|
|||
|---|---|---|---|
|
#18+
maytonСобственно применение рекурсии вообще не является атипаттерном. Когда как. Если у нас возможны глубокие рекурсии, то нужно разворачивать. Если у нас многопоточный сервер, то можно сэкономить памяти уменьшив размер стека. Но алгоритмы реализованые на рекурсии нам могут испортить всё удовольствие от оптимизации. maytonОна (рекурсия) де-факто присутствует во многих библиотеках XML-парсеров, regexps e.t.c. Это не делает рекурсию автоматически хорошим решеним. http://search.oracle.com/search/search?search_p_main_operator=all&start=1&group=bugs.sun.com&q=StackOverflowError maytonСчастливые обладатели Java7 радостно танцуют http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#isSymbolicLink(java.nio.file.Path) Да там вообще сплошные танцы http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#walkFileTree(java.nio.file.Path, java.util.Set, int, java.nio.file.FileVisitor) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2013, 16:11:51 |
|
||
|
Рекурсивный вывод директорий
|
|||
|---|---|---|---|
|
#18+
BlazkowiczmaytonОна (рекурсия) де-факто присутствует во многих библиотеках XML-парсеров, regexps e.t.c. Это не делает рекурсию автоматически хорошим решеним. http://search.oracle.com/search/search?search_p_main_operator=all&start=1&group=bugs.sun.com&q=StackOverflowError Я думаю "дорога ложка к обеду". Сама по себе задача разворачивания рекурсии в Stack<> сложна и нетрививиальна. Ее невозможно зеэстимэйтить по срокам. Поэтому лучше пока кодить как есть. А при возникновении Stack Overflow думать над оптимизациями. Возможно они лежат в плоскости шардинга или уменьшения объёма задачь путём деления на части (порции) обработки. Но саму постановку типа разворачивание рекурсии я никому не пожелаю в качестве дефекта или ТЗ на доработку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2013, 17:07:29 |
|
||
|
Рекурсивный вывод директорий
|
|||
|---|---|---|---|
|
#18+
maytonСама по себе задача разворачивания рекурсии в Stack<> сложна и нетрививиальна. Почему? Тут у автора на стеке одна переменная - File - решение банальное на цикле выходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2013, 17:11:03 |
|
||
|
Рекурсивный вывод директорий
|
|||
|---|---|---|---|
|
#18+
BlazkowiczmaytonСама по себе задача разворачивания рекурсии в Stack<> сложна и нетрививиальна. Почему? Тут у автора на стеке одна переменная - File - решение банальное на цикле выходит. Вот пускай он щас в топике без подсказок это воплотит. А еще я-бы голосование поднял. Какой процент разработчиков (неглупых в своём классе из знающих прекрасно предметную область) вообще захотят браться за разворот рекурсий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2013, 17:15:52 |
|
||
|
Рекурсивный вывод директорий
|
|||
|---|---|---|---|
|
#18+
maytonВот пускай он щас в топике без подсказок это воплотит. Не аргумент. maytonА еще я-бы голосование поднял. Какой процент разработчиков (неглупых в своём классе из знающих прекрасно предметную область) вообще захотят браться за разворот рекурсий. Тоже. В чем именно сложности? Мне правда интересно. Объединяем все переменные хранимые на стэке в одну структуру. Заводим коллекцию под стэк, пока стэк не пуст, заполняем\удаляем из него элементы в зависимости от логики рекурсии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2013, 17:22:45 |
|
||
|
Рекурсивный вывод директорий
|
|||
|---|---|---|---|
|
#18+
Блажкович. Я думаю что для тебя действительно это не проблема. Но я вел немного практику у студентов и я знаю над чем они парятся и что у них вызывает реальный затык. Это просто результат моих наблюдений. Не бизнес-код а именно алгоритмизация вызывает у них зависание головного мозга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2013, 18:05:53 |
|
||
|
Рекурсивный вывод директорий
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Зачем развертывать в рекурсию, которая нуждается в стеке состояний? Чтобы она вместо своего стека в случае чего могла заполнить всю память JVM? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2013, 18:26:45 |
|
||
|
Рекурсивный вывод директорий
|
|||
|---|---|---|---|
|
#18+
ЛагманЗачем развертывать в рекурсию, которая нуждается в стеке состояний? А зачем вообще нужна рекурсия если она не нуждается в этом стеке? :) ЛагманЧтобы она вместо своего стека в случае чего могла заполнить всю память JVM? Именно. По-идее цикл должен быть быстрее. Цикл не приведет к StackOverflowError в случае глубокой рекурсии. Хотя это можно решить, запуская задачу через новый поток с заданным размером стека. Ну, и как я уже написал выше, если у нас многопоточный сервер, мы сможем сэкономить на памяти. Ведь стэк под поток выделяется целиком и сразу фиксированого размера. А с коллекцией в куче, память выделяется только там где этого действительно нужно для обсчета рекурсии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2013, 18:32:47 |
|
||
|
Рекурсивный вывод директорий
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Ок, убедили :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2013, 18:36:34 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38455155&tid=2128261]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
281ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
| others: | 194ms |
| total: | 561ms |

| 0 / 0 |
