Ключом к обоим из этих фрагментов является следующая идея:
check if item found at (v)
if item not found,
for all vertices u adjacent to v
depth_first_search(u)
Вместо того, чтобы сразу проверять конечное условие для всех дочерних узлов (v) (списка), вы проверяете толькодля него в текущем узле v. Если конечное условие не выполнено, вы применяете ту же самую глубину первой функции поиска, начиная с первого потомка v, u1.Поскольку у u1 также могут быть дочерние элементы, та же самая функция будет применена к дочерним элементам u1 до обработки оставшихся дочерних элементов v и т. Д.Вот почему он называется поиском по глубине, так как ваш поиск сначала ищет самый низкий набор дочерних элементов в пути, а затем возвращается, чтобы проверить оставшихся дочерних элементов.