【发布时间】:2019-09-29 08:15:27
【问题描述】:
我写了一个递归函数来衡量,例如列表深度,由于某种原因,它返回了意想不到的结果。
我有两个功能: 1. 检查对象是否可迭代 2. 测量物体的深度,例如列表
我想我在第二个函数中遗漏了一些东西,但我无法理解为什么从 else 返回的变量 n 会变成一个有趣的结果。
我设置了print 以查看n 在每个阶段是如何变化的,它似乎按预期工作,但是当从else 返回时,它变成了错误的数字。
这是两个函数的代码:
def isiterable(obj):
'''
takes in an obj and returns 1 if iterable or 0 if not
strings are discarded as iterable
:param obj: any object
:return: int
'''
if isinstance(obj, str):
return 0
else:
try:
iter(obj)
return 1
except TypeError as err:
return 0
我的第二个函数在遇到问题时是递归的
def get_depth(a, n=0):
if isiterable(a):
return n + f(a[0], n+1)
else:
return n
我有三个例子:
a = [[[1,2], [3,4]], [[5,6],[7,8]]]
b = [[1,2], [2,3]]
c = [2]
我希望 get_depth 为列表 a 返回 3,为列表 b 返回 2,为列表 c 返回 1。
由于某种原因,a 的结果加倍并返回 6。在b 的情况下,它是 3 而不是 2。
非常感谢
【问题讨论】:
标签: python-3.x recursion