обход каталога с использованием циклов

Я знаю, что этот вопрос уже задавался раньше, но у меня есть конкретный пример, о котором я думал.
В настоящее время у меня есть кусок кода, вроде псевдокода, потому что я не на своем рабочем терминале:

void setTree(string dir) {
add dir to dirlist
create dir object //contains list of subdirs and files
for subdir in dir.subs do
setTree(subdir)
end
}

Это возможно сделать только для циклов for, потому что вы не можете знать во время компиляции, сколько подкаталогов будет во время компиляции.
Псевдокод это нормально или какое-то объяснение или алгоритм. Мне ничего не нужно, потому что мне больше всего нравится мое рекурсивное решение, но я бы очень хотел знать, возможно ли это. Как и теория, стоящая за этим.

1

Решение

Для теории см. Ответ с наибольшим количеством голосов здесь: Может ли каждая рекурсия быть преобразована в итерацию?

Практически:

void setTree(string dir) {
add dir to dirlist
while (dirlist not empty) {
d = dirlist.pop()
create d object
for subdir in d.subs do
append subdir to dirlist
end
}
}

Я пытался следовать странному синтаксическому смешению вашего псевдокода, надеюсь, он все еще читабелен.

2

Другие решения

Это зависит от дизайна класса dir. Если подкаталоги сохранены в массиве или списке, есть значение размера, которое вы можете использовать как максимум для цикла for. Это значение будет определено во время выполнения. Если подкаталоги сохранены, в противном случае вы, вероятно, должны использовать цикл while.

Надеюсь, это поможет
ChronosMOT

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector