我正在努力使用一个递归函数来打印一个家族树,直到某个"深度/水平"。
我已经定义了类" Person"每个人都有一些后代,所以我们说:
>>> george.children
[<__main__.Person object at 0x000002C85FB45A58>]
>>> george.name
'George'
我想打印家谱,每一代都用4个空格分隔,例如:
>>> family_tree(george, level = 2)
George
Michael
Juliet
Peter
Mary
乔治是0级,然后他的两个儿子是1级等等。
你有任何想法如何使用递归写这个?我将不胜感激。
答案 0 :(得分: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)