Оператор возврата не работает должным образом в рекурсивной функции Python - PullRequest
0 голосов
/ 19 октября 2019

Привет, у меня есть код Python для алгоритма DFS. Мне нужно вернуться, когда я достиг "GoalNode". Но моя функция не возвращается, она работает, пока не достигнет всех узлов. Думаю, проблема в том, что я не знаю, как работает рекурсивная функция. Моя функция должна останавливаться жирными строками кода. Как я могу решить эту проблему

def DFS(visited, StartNode, GoalNode):
    index =(list(MainDictionary).index(StartNode))
    visited[index] = True
    print(StartNode)

    **# it has to return here out put must be only F - C but function reaches all the nodes
    if StartNode == GoalNode:
        return**

    #This line is for accessing my dictionary data type
    values = ReturnKeyVal(StartNode)
    for key in values:
        index =(list(values).index(key))
        if visited[index] == False and values[key] != 0:

            DFS(visited, key, GoalNode)

def ReturnKeyVal(Target):
    for keys, values in MainDictionary.items():
            if keys == Target:
                return values

visited = [False] * (len(MainDictionary)) 
DFS(visited,"F", "C")

1 Ответ

0 голосов
/ 21 октября 2019

Хотя у меня есть другие вопросы по поводу вашего кода (поскольку я не могу понять, что должен делать ReturnKeyVal, если MainDictionary является обычным словарем Python, он просто вернет значение, соответствующее ключу, но если вы просто захотите это сделатьпоэтому вы бы написали для него функцию? Получение соответствующего значения - это то, для чего нужны ключи. Именно поэтому я попросил MainDictionary.) Проблема довольно проста: вы не проверяете, нашел ли вызов функции цель, поэтомуцикл будет продолжаться независимо от того, был ли он найден. Возврат просто завершает текущий вызов функции, а не всю рекурсию. Верните true, если оно найдено, а затем проверьте возвращаемое значение и продолжайте возвращать true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...