我正在尝试使用递归来查找“表达式”的深度,即,有多少层嵌套元组:例如,

depth(('+', ('expt', 'x', 2), ('expt', 'y', 2))) => 2

depth(('/', ('expt', 'x', 5), ('expt', ('-', ('expt', 'x', 2), 1), ('/', 5, 2)))) => 4

基本上,我认为我需要检查(从外到内)作为元组实例的每个元素,然后,如果是,则递归调用depth函数。但是我需要找到一种方法来找出哪一组递归调用的最大深度是,这就是我要坚持的地方。这是我到目前为止的内容:
def depth3(expr):
    if not isinstance(expr, tuple):
        return 0
    else:
        for x in range(0, len(expr)):
            # But this doesn't take into account a search for max depth
            count += 1 + depth(expr[x])
    return count

对解决此问题的好方法有何想法?

最佳答案

您走在正确的轨道上,但是不用count += 1 + depth(expr[x])来找到“总”深度,而是使用max来找到最大深度:

def depth(expr):
    if not isinstance(expr, tuple):
        return 0
    # this says: return the maximum depth of any sub-expression + 1
    return max(map(depth, expr)) + 1

print depth(("a", "b"))
# 1
print depth(('+', ('expt', 'x', 2), ('expt', 'y', 2)))
# 2
print depth(('/', ('expt', 'x', 5), ('expt', ('-', ('expt', 'x', 2), 1), ('/', 5, 2))))
# 4

关于python - 递归查找表达深度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12374193/

10-14 18:23