首页 > 解决方案 > 不规则矩阵的递归找不到结果

问题描述

我想练习一下递归,并认为在不规则矩阵中搜索会很有趣。我有一个有效的简单递归,但不知何故并没有完成整个数组。它找不到数字 8-11。它需要返回匹配的坐标,以便我以后可以使用它。我错过了什么吗?


array = [
    [1, 2, [3, 4, [5, [6, [7, 0]]]], [8, 9], 10, 11]
    ]

def searchArray(array, searched, coordinates=[]):
    for i, dimension in enumerate(array):
        if type(dimension) == int:
            if dimension == searched:
                return coordinates+[i,]
        else:
            coordinates.append(i)
            return searchArray(dimension, searched, coordinates=coordinates)

searched = 5
coordinates = searchArray(array, searched)
print(coordinates)

标签: pythonrecursion

解决方案


问题是,一旦对嵌套列表进行递归调用,无论是否找到searched. 所以for循环永远不会继续查看列表的其余部分。

返回前需要检查递归是否成功。

此外,您不应该coordinates使用append(). 无论是否成功,您最终都会返回您下降到的所有坐标的列表。在递归中传递一个新列表作为参数。

def searchArray(array, searched, coordinates=[]):
    for i, dimension in enumerate(array):
        if type(dimension) == int:
            if dimension == searched:
                return coordinates+[i,]
        else:
            found = searchArray(dimension, searched, coordinates=coordinates + [i])
            if found:
                return found
    return None # Not found

推荐阅读