Python 不规则矩阵上的递归可以';找不到结果
我想练习一下递归,并认为在不规则矩阵中搜索会很有趣。我有一个简单的递归,它可以工作,但却不能完成整个数组。它找不到8-11号。它需要返回匹配位置的坐标,以便我以后可以使用它。我遗漏了什么吗Python 不规则矩阵上的递归可以';找不到结果,python,recursion,Python,Recursion,我想练习一下递归,并认为在不规则矩阵中搜索会很有趣。我有一个简单的递归,它可以工作,但却不能完成整个数组。它找不到8-11号。它需要返回匹配位置的坐标,以便我以后可以使用它。我遗漏了什么吗 数组=[ [1, 2, [3, 4, [5, [6, [7, 0]]]], [8, 9], 10, 11] ] def searchArray(数组,已搜索,坐标=[]): 对于i,枚举(数组)中的维度: 如果类型(尺寸)==int: 如果维度==已搜索: 返回坐标+[i,] 其他: 坐标。附加(i) 返回
数组=[
[1, 2, [3, 4, [5, [6, [7, 0]]]], [8, 9], 10, 11]
]
def searchArray(数组,已搜索,坐标=[]):
对于i,枚举(数组)中的维度:
如果类型(尺寸)==int:
如果维度==已搜索:
返回坐标+[i,]
其他:
坐标。附加(i)
返回searchArray(维度,搜索,坐标=坐标)
搜索=5
坐标=搜索数组(数组,已搜索)
打印(坐标)
问题在于,只要对嵌套列表进行递归调用,不管是否找到了已搜索的
,都会从函数返回。因此,for的循环永远不会继续查找列表的其余部分
在返回之前,需要检查递归是否成功
另外,您不应该使用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
顺便说一句,将np.array
与“不规则矩阵”一起使用是没有意义的。你想做什么?你似乎在试图找到“搜索”的维度?在你提供的例子中,第五维?@Meredith是的,我需要坐标。我更新了这个问题,并接受了下面的答案