Python错误:递归超过最大深度

2024-09-26 04:48:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个Python程序,递归地在2D数组中查找目标,以解决this问题。我使用一个二进制搜索方法递归地查找目标是否存在,但它给了我这个最大递归深度超出错误。有什么建议吗

我的代码:

def searchMatrix(self, matrix, target):
    small = [0,0]
    big = [len(matrix)-1,len(matrix[0])-1]
    return self.searchUtil(matrix,target,small,big)
    
def searchUtil(self,matrix,target,small,big):
    if big >= small:
        #find the mid target
        midx,midy = (small[0]+big[0])/2,(small[1]+big[1])/2
        if matrix[midx][midy] == target:
            return True
        #if mid is >= target, it will exclude all the element smaller than it
        if matrix[midx][midy] >= target:
            return self.searchUtil(matrix,target,[midx,0],[midx,midy-1]) or self.searchUtil(matrix,target,[0,midy],[midx-1,midy]) or self.searchUtil(matrix,target,[0,0],[midx-1,midy-1])
        else:
        #if mid is < target, it will exclude all the element bigger than it
            return self.searchUtil(matrix,target,[midx+1,0],[len(matrix)-1,midy]) or self.searchUtil(matrix,target,[0,midy+1],[midx,len(matrix[0])-1]) or self.searchUtil(matrix,target,[midx+1,midy+1],[len(matrix)-1,len(matrix[0])-1])
    else:
        return False

Tags: ortheselftargetlenreturnifit
1条回答
网友
1楼 · 发布于 2024-09-26 04:48:23

如@DarrylG所示,在这种情况下,二进制搜索不适用。
这就是我解决这个问题的方法:

def searchMatrix(self, matrix, target):
        """
        :type matrix: List[List[int]]
        :type target: int
        :rtype: bool
        """
        
        if matrix:
            row, col, width = len(matrix)-1, 0, len(matrix[0])
            
            while row>=0 and col<width:
                if matrix[row][col]==target:
                    return True
                elif matrix[row][col]>target:
                    row -= 1
                else:
                    col += 1
                    
        return False
 
#  Or this one liner:  [it passed too]
#  return any(target in row for row in matrix)

相关问题 更多 >