Рекурсия алгоритма балансировки Parenthesis

Может ли кто-нибудь объяснить мне алгоритм проблемы балансировки скобок?

"Правильно ли синтаксис строки (кода) из-за сопоставления пар круглых скобок?"

Я не могу понять это, кроме того, что для каждого "(" должен быть другой ")", чтобы алгоритм возвращал true.

Спасибо!

Я нашел это решение, но я его не понимаю, и я не хочу его копировать и вставлять:

def balance(chars: List[Char]): Boolean = {
    def balanced(chars: List[Char], open: Int): Boolean = {
        if (chars.isEmpty) open == 0
            else
                if (chars.head == '(') balanced(chars.tail,open+1)        
                else
                    if (chars.head == ')') open>0 && balanced(chars.tail,open-1)
                    else balanced(chars.tail,open)
    }      
    balanced(chars,0)
 }

Ответ 1

Этот код рекурсивно проверяет, содержит ли строка соответствующее количество открывающих и закрывающих круглых скобок, вызывая balanced() в строке без первого элемента.

Ожидание круглых скобок в строке сохраняется в виде индикатора баланса open - положительные значения указывают количество необходимых ")" и отрицательные суммы необходимых "(" Начальный баланс равен 0.

Когда рекурсия достигает конца строки, она проверяет, нормально ли баланс (open == 0), например. было сопоставимое количество скобок.

Существует также проверка (open > 0), чтобы убедиться, что ')' не встречался до того, как был "(" он может закрыть ".