【问题标题】:Island Sizes problem giving maximum recursion depth error岛大小问题给出最大递归深度误差
【发布时间】:2021-01-12 22:39:29
【问题描述】:

我正在解决查找 nxm 矩阵中存在的所有岛的大小的问题。我使用了递归方法,但不知道我的代码中的错误是什么导致了最大递归深度错误。提前谢谢你:)

def riverSizes(matrix):
    returnList = []
    for row in range(len(matrix)):
        for column in range(len(matrix[row])):
            if matrix[row][column] == 1:
                returnList.append(visitConnected(matrix,row,column))
                
def visitConnected(matrix,row,column,size=0):
    if inBounds(row,column,matrix):
        if matrix[row][column] == 1:
            matrix[row][column] == -1
            size += 1
            size += visitConnected(matrix,row +1,column)
            size += visitConnected(matrix,row - 1,column)
            size += visitConnected(matrix,row,column+1)
            size += visitConnected(matrix,row,column-1)
        else:
            return size
    else:
        return size

        
def inBounds(row,column,matrix):
    return row >= 0 and row < len(matrix) and column >= 0 and column < len(matrix[0])

【问题讨论】:

    标签: python recursion gaps-and-islands


    【解决方案1】:

    没有看到示例或调用,我至少可以看到一个问题。考虑矩阵[[1, 1]]visitConnected(..., 0, 0) 会调用size += visitConnected(..., 0, 1),后者会调用size += visitConnected(..., 0, 0),所以你永远不会终止。

    你写matrix[row][column] == -1而不是matrix[row][column] = -1,所以那里什么也没有发生。您也不会返回最终尺寸,因此您的返回列表将全部为 None

    【讨论】:

    • 我的代码中有一行写着 matrix[row][column] = -1 所以代码知道它已经被访问过,反过来不会再次通过它递归,我实现了吗那行错了吗?
    • 不,该行没有设置任何内容,这是根本原因。您的函数不会返回它计算的大小,这将是一个不同的问题。
    • 我确保它返回它所采取的每个递归步骤的大小,当我降低深度级别时 1 不会变为 -1 吗?
    • 检查我的答案,你有一个错字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 2018-12-03
    • 2013-12-01
    • 2017-07-18
    • 2021-12-11
    相关资源
    最近更新 更多