2017-12-02 166 views
0

我正在努力使用遞歸函數來打印家族樹,直到某個「深度/級別」。打印家族樹,直到某個級別| Python 3

我已經定義的類「人」與每個人都有一些後代(S),所以可以說:

>>> george.children 
[<__main__.Person object at 0x000002C85FB45A58>] 
>>> george.name 
'George' 

我要打印的家庭樹的方式,每一代由4分離空格,例如:

>>> family_tree(george, level = 2) 
George 
    Michael 
     Juliet 
    Peter 
     Mary 

喬治是0級,那麼他的兩個兒子都是1級,等

你請有任何想法如何寫這個使用遞歸?我將不勝感激。

回答

0

您可以使用遞歸。在遞歸的每個更深層次上,您應該再生成4個空格。所以爲了這個目的,你可以傳遞一個參數depth,這個參數在每次遞歸調用時都會增加。

這裏是你如何能做到這一點:

# You'll have a class like this: 
class Person: 
    def __init__(self, name): 
     self.name = name 
     self.children = [] 
    def addChild(self, child): 
     self.children.append(child) 
     return self # to allow chaining 

# The function of interest: 
def family_tree(person, level = 2): 
    def recurse(person, depth): 
     if depth > level: return 
     print (" " * (4 * depth) + person.name) 
     for child in person.children: 
      recurse(child, depth+1) 
    recurse(person, 0) 

# Sample data 
george = Person("George").addChild(
    Person("Michael").addChild(
     Person("Juliet").addChild(
      Person("don't show me") 
     ) 
    ) 
).addChild(
    Person("Peter").addChild(
     Person("Mary") 
    ) 
) 

# Call the function 
family_tree(george) 
+0

非常感謝您!這種深度論點也是我腦中所想到的,但我從來沒有正確地認識到它的增加,現在我認爲它是正確的,它的作用就像魅力一樣! – clifer4

+0

不客氣;-) – trincot