-2

这是我的问题:我不明白代码是如何工作的。怎么"())("退货false

def balance(chars: List[Char], numOpens: Int): Boolean = {
  if (chars.isEmpty) {
    numOpens == 0
  } else {
    val h = chars.head
    val n =
      if (h == '(') numOpens + 1
      else if (h == ')') numOpens - 1
      else numOpens
    if (n >= 0) balance(chars.tail, n)
    else false
  }
}
4

2 回答 2

3
于 2013-09-22T07:03:28.423 回答
3

这些行:

if (n >= 0) balance(chars.tail, n)
else false

表示如果在任何时候有任何不平衡的)字符,false将立即返回(n 将 < 0)。对于您给出的具体示例:())(我们可以按照函数通过字符串工作时 n 的值如何变化:

  • 第一个字符 - (: n -> 1,使用剩余字符继续检查:))(
  • 第二个字符 - ): n -> 0,使用剩余字符继续检查:)(
  • 第三个字符 - ): n -> -1,else触发 -false立即返回。从不检查第四个字符。
于 2013-09-22T06:21:31.340 回答