В приведённом фрагменте на Python: "def dfs(v, visited=set()): visited.add(v); for u in graph[v]: if u not in visited: dfs(u, visited)"; объясните потенциальную ошибку при повторных вызовах функции и предложите исправление

23 Мар в 09:50
16 +1
0
Ответы
1
Проблема: аргумент по умолчанию `visited=set()` создаётся один раз при определении функции и пересчитывается между вызовами. Поэтому при повторных вызовах ранее отмеченные вершины остаются в множестве — обход будет неполным/неправильным.
Почему: Python использует один и тот же объект-мутируемый по умолчанию для всех вызовов функции.
Исправление (стандартный приём — использовать `None` и инициализировать внутри):
def dfs(v, visited=None):
if visited is None:
visited = set()
visited.add(v)
for u in graph[v]:
if u not in visited:
dfs(u, visited)
Альтернативы: требовать явной передачи `visited` при внешних вызовах или держать `visited` как локальную структуру и возвращать её.
23 Мар в 10:28
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир