2016-12-12 2 views
-2

Я застрял с рекурсивными функциями для данного генеалогического древа в формате словаря (ключи - это родители, значения - это дети).Рекурсивные функции и семейные деревья

в примере family_tree = {"Adam": ["Michael", "Clara", "Daniel"], "Clara": [], "Daniel": ["Elizabeth", "Hans"], etc.}

Адам в этом примере, имеет 3 детей, один из которых является Клара. У нее нет детей и т. Д. И т. Д. Довольно просто.

Теперь, для рекурсивных функций.

  1. Напишите глубину функции (человека), которая возвращает глубину генеалогического древа человека.

Если человек не имеют детей, глубина ее генеалогическое древо 1. Если (s) у него есть дети, но не внуки, глубина не равна 2. Если он (а) есть внуки, но нет grandgrandchildren, глубина - 3. И так далее.

Не должно ли это работать?

def children(person): return family_tree[person]

def depth(person): if not children(person): return 1 for child in children(person): a = depth(child) if a!= None: return a + 1

Спасибо! :)

+1

Не могли бы вы продемонстрировать какие-либо усилия при решении этого вопроса, чтобы дать представление о том, где вам нужна помощь? –

+0

О, мне нужна помощь с рекурсией в целом. Я понятия не имею, как подойти к этому. –

+0

Сделал 2-й! Обновлен вопрос. :) –

ответ

1

Логика глубины вычислений:

if a person has no children 
    depth is 1 
else 
    depth is 1 + (maximum depth of person's children) 
0

Ваша проблема сокровенное состояние:

  • Вы должны всегда возвращают целочисленный результат; Нет не является хорошим выбором.
  • Необходимо вернуть 1 плюс максимум глубина всех детей. Ваш текущий код возвращает глубину первого ребенка плюс 1.

Будьте терпеливы во внутреннем цикле. Если есть дети, просто отслеживайте самую большую глубину, которую вы нашли до сих пор. Когда вы закончите цикл, затем добавьте 1 и верните это.

Смежные вопросы