我想练习一下递归,并认为在不规则矩阵中搜索会很有趣。我有一个有效的简单递归,但不知何故并没有完成整个数组。它找不到数字 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 = 5coordinates = searchArray(array, searched)print(coordinates)
1 回答
慕工程0101907
TA贡献1887条经验 获得超5个赞
问题是,一旦对嵌套列表进行递归调用,无论是否找到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
添加回答
举报
0/150
提交
取消