Я использую вложенный словарь для обозначения вершин и ребер графовы, вроде:Неправильная рекурсивная функции, чтобы найти число возможных маршрутов
[
A: [B,D,E],
B: [C],
C: [D,E],
D: [C,E],
E: [B]
]
Это мой код до сих пор:
def number_of_trips(self, start_point, end_point, maxstops):
return self._find_path(start_point, end_point, 0, 0, maxstops)
def _find_path(self, point_a, end_point, current_stops, routes, maxstops):
current_stops += 1
if current_stops > maxstops:
return routes
if end_point in self.digraph[point_a]:
return routes + 1
else:
for x in self.digraph[point_a]:
return self._find_path(x, end_point, current_stops, routes, maxstops)
return routes
И этот метод называется так:
number_of_trips('C', 'C', 3)
который выводит 1 вместо 2.
Что не так с моей рекурсивной функцией?
Я думаю, вы должны как-то суммировать все маршруты из следующих рекурсии вместо ' возвратите' их. В ветке 'else' вы будете« возвращать »в свой первый« x », а не зацикливать все« self.digraph [point_a] ». – Luca
Вы не обновляете значение «маршрутов» когда-либо! – hjpotter92