我想制作一个递归函数,用于测量a的深度 Python中的元组树结构。这是麻省理工学院人工智能课程中的练习,我没有参加课程。
我从左边开始,在树的叶子上加零。如果不是叶子,我会一直走到树下,直到我到达一片叶子。我对孩子们进行了最大化并将结果返回给父母。递归会给我最终的结果。
<body>
<script src="/files/mycss.css"></script>
<script src="/files/index.js"></script>
<script src="/files/service-worker.js"></script>
</body>
答案 0 :(得分:3)
在递归函数中,使用计数器跟踪当前深度:
ls0 = 'x'
ls1 = ('expt', 'x', 2)
ls2 = ('+', ('expt', 'x', 2), ('expt', 'y', 2))
ls4 = ('/', ('expt', 'x', 5), ('expt', ('-', ('expt', 'x', 2),1), ('/', 5, 2)))
tree = [ls1, ls2, ls4]
def depth(b, count=0):
if isinstance(b, str) or isinstance(b, int) or all(not isinstance(i, tuple) for i in b):
yield count+1
else:
for i in b:
for c in depth(i, count+1):
yield c
final_results = [max(i) for i in list(map(list, list(map(depth, tree))))]
输出:
[1, 2, 4]
答案 1 :(得分:0)
您也可以尝试这种简单的递归解决方案:
def depth(l):
depths = [depth(item) for item in l if isinstance(item, tuple)]
if len(depths) > 0:
return 1 + max(depths)
return 1
ls0 = ('x')
ls1 = ()
ls2 = ('expt', 'x', 2)
ls3 = ('+', ('expt', 'x', 2), ('expt', 'y', 2))
ls4 = ('/', ('expt', 'x', 5), ('expt', ('-', ('expt', 'x', 2),1), ('/', 5, 2)))
tuples = [ls0, ls1, ls2, ls3, ls4]
for tup in tuples:
print(depth(tup))
哪个输出:
1
1
1
2
4