python - 不规则矩阵的递归找不到结果
问题描述
我想练习一下递归,并认为在不规则矩阵中搜索会很有趣。我有一个有效的简单递归,但不知何故并没有完成整个数组。它找不到数字 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)
解决方案
问题是,一旦对嵌套列表进行递归调用,无论是否找到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
推荐阅读
- java - 如果编辑文本不为空,如何更改按钮?
- javascript - 如何将 svg(我没有画布)中的动画过渡转换为视频?
- python - 如何使用python烧瓶中的for循环以html形式提供多个输入
- sql - 将 nvarchar 转换/转换为 datetime(2)
- serilog - Serilog WriteTo.MSSqlServer 不工作控制台(非核心)
- python - 减少 Asyncio 中的延迟
- r - Rstudio将此data.frame与一列中的重复值拆分为一行5列?
- javascript - 如何使异步循环在迭代之间等待 1 秒?
- javascript - Axios POST 请求发送到 Node.js API 时返回 404 错误
- powershell - 无法使用 PowerShell 创建快捷方式