首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不规则矩阵上的递归找不到结果

不规则矩阵上的递归找不到结果
EN

Stack Overflow用户
提问于 2020-04-11 06:38:41
回答 1查看 22关注 0票数 0

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

代码语言:javascript
运行
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-11 06:48:16

问题是,只要对嵌套列表进行递归调用,无论它是否找到searched,都会立即从函数返回。因此,for循环再也不会继续查找列表的其余部分。

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

此外,您不应该使用append()在适当的位置修改coordinates。您最终将返回一个列表,其中包含您下降到的所有坐标,无论它是否成功。在递归中传递一个新的列表作为参数。

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61149679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档