2016-12-12 68 views
-2

我被困在字典格式(鍵是父母,值是兒童)的給定家族樹的遞歸函數。遞歸函數和家族樹

每例如family_tree = {"Adam": ["Michael", "Clara", "Daniel"], "Clara": [], "Daniel": ["Elizabeth", "Hans"], etc.}

亞當在這個例子中有3個孩子,其中之一是克拉拉。她沒有孩子等等,非常簡單。

現在,爲遞歸函數。

  1. 寫一個函數深度(人),返回人的家譜的深度。

如果一個人沒有孩子,她的家庭樹的深度是1.如果他有孩子但沒有孫子,深度是2.如果他有孫子但沒有孫子女,深度是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

做了第二個!更新了問題。 :) –

回答

1

爲計算深度的邏輯是:

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

您的問題是最裏面的條件:

  • 你應該始終返回一個整數的結果; 不是一個好的選擇。
  • 您需要返回1加最大深度的所有孩子。您當前的代碼將返回的第一個深度子加1.

請耐心等待您的內循環。如果有孩子,只記錄目前爲止發現的最大深度。當你完成循環時,然後加1並返回。