Оптимизация рекурсивной функции - PullRequest
0 голосов
/ 23 сентября 2019

Я написал некоторый код для вычисления пустых ячеек со значением цвета по умолчанию, которые находятся в окружении черных ячеек (interior.color).

Option Explicit
    Private arr(1 To 20, 1 To 20) As Boolean
    Private pocet As Integer    

Private Sub CommandButton1_Click()

    Dim x As Integer
    Dim y As Integer
    Dim i As Integer, j As Integer

    Dim dotaz As Integer
    Erase arr()

    pocet = 0
    x = Worksheets("List2").Range("Y1").Value
    y = Worksheets("List2").Range("Y2").Value

    Worksheets("List2").Cells(y, x).Interior.Color = RGB(0, 255, 0)
    dotaz = MsgBox("Pokračovat?", vbYesNo)
    If dotaz = vbYes Then
        vyplnit x, y
    Else
    End If

    MsgBox pocet

End Sub
Private Sub vyplnit(x As Integer, y As Integer) 'rekurzivní funkce
    If x < 1 Or x > 20 Or y < 1 Or y > 20 Then
        Exit Sub
    End If

    If arr(x, y) = True Or Worksheets("List2").Cells(y, x).Interior.Color = vbBlack Then
    Else
        arr(x, y) = True
        pocet = pocet + 1
        vyplnit x + 1, y
        vyplnit x - 1, y
        vyplnit x, y + 1
        vyplnit x, y - 1
    End If

Это работает отлично.переменная «pocet» содержит информацию о том, сколько клеток находится внутри области.Однако, когда я использую эту функцию в более высоком масштабе, я получаю ошибку 28 (Недостаточно места в стеке).что вызвано слишком большим количеством стеков функций (Functionception).Я думал о какой-то оптимизации, чтобы не получить ошибку 28, но не смог понять какую-либо.Есть намеки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...