Я предполагаю, что вы хотите обсудить разницу между двумя подходами одного и того же алгоритма. У нас есть график G = (V, E) , где V - это набор вершин, а E - это набор пар вершин, и мы запускаем Первый поиск (DFS) на графике:
- Использование рекурсивного подхода, при котором метод
visit
рекурсивно вызывает себя.
- Использование явного стека в цикле.
Оба метода в целом используют одинаковое количество места, O (d) , где d - глубина дерева поиска DFS (оно ограничено самым длинным возможные нециклические пути на графике.
Обычно явный стек использует немного меньше памяти, как пишет Пол Р. Другим важным моментом является то, что во многих языках стек вызовов функций строго ограничен и прервет программу, если он станет слишком большим. Явный стек, управляемый в куче, не представляет подобной проблемы. Чтобы получить немного меньше использования памяти, вы должны будете представлять стек как массив. Если вы представите его как связанный список, он, вероятно, не будет лучше. Это может быть даже немного хуже.