我正在学习Scala并编写一个函数(递归)来计算括号的数目:打开+1,关闭-1,以匹配和平衡列表中的所有圆括号的字符。如果括号是平衡的,它应该返回0。Scala返回值与预期值不同
我想出了(与众多打印报表来了解这是怎么回事):
def countPar(charList: List[Char], count: Int): Int = {
if (count < 0) {
println("negative count, returning", count)
count
}
else if (charList.isEmpty) {
println("empty list, returning", count)
count
}
else if (charList.head.equals('(')) {
println("head is ", charList.head, " count + 1:", count + 1)
count + countPar(charList.tail, count + 1)
}
else if (charList.head.equals(')')) {
println("head is ", charList.head, " count - 1:", count - 1)
count + countPar(charList.tail, count - 1)
}
else {
println("head is ", charList.head, " count:", count)
countPar(charList.tail, count)
}
}
val parCount = countPar("(a(b)c)".toList, 0)
println(parCount)
打印报表做似乎证实了逻辑来工作,但是最终的返回值是错误的:
(head is ,(, count + 1:,1)
(head is ,a, count:,1)
(head is ,(, count + 1:,2)
(head is ,b, count:,2)
(head is ,), count - 1:,1)
(head is ,c, count:,1)
(head is ,), count - 1:,0)
(empty list, returning,0)
parCount: Int = 4
我在想什么?
为什么'count +'在几个递归情况下? – user2357112
我正在跟踪括号的数量并将其作为参数传递。开头的+1,最后的-1。 –
想想递归调用应该返回什么。你确定'count +'不是重复计算任何东西吗? – user2357112