我正在尝试使用递归来查找“表达式”的深度,即,有多少层嵌套元组:例如,
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/