Проблема с размерами островов, дающая ошибку максимальной глубины рекурсии

#python #recursion #gaps-and-islands

#python #рекурсия #пробелы и острова

Вопрос:

Я решаю проблему нахождения размеров всех островов, существующих в матрице 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])
 

Ответ №1:

Не видя примеров или вызова, я вижу хотя бы одну проблему. Рассмотрим матрицу [[1, 1]] . visitConnected(..., 0, 0) вызовет size = visitConnected(..., 0, 1) , который вызовет size = visitConnected(..., 0, 0) , поэтому вы никогда не завершите работу.

Вы пишете matrix[row][column] == -1 вместо matrix[row][column] = -1 , поэтому там ничего не происходит. Вы также не возвращаете окончательный размер, поэтому ваш список возврата будет all None .

Комментарии:

1. В моем коде есть строка с надписью matrix [строка] [столбец] = -1, поэтому код знает, что он уже был посещен, и, в свою очередь, не повторяет его снова, я неправильно реализовал эту строку?

2. Нет, эта строка ничего не устанавливает, что является основной причиной. Ваша функция не возвращает вычисляемый размер, что будет другой проблемой.

3. Я убедился, что он возвращает размер каждого из шагов повторения, которые он выполняет, не меняется ли значение 1 на -1, когда я опускаюсь на уровень глубины?

4. Проверьте мой ответ, у вас опечатка.