2017-12-02 1 views
0

특정 "깊이/레벨"까지 가계도를 인쇄하는 재귀 함수로 고민하고 있습니다.특정 레벨까지 가계도 인쇄하기 | Python 3

그렇게 말할 수, I 클래스 "사람"을 정의하고 각 사람은 약간의 자손 (들)이 있습니다

>>> 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