2017-12-02 168 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