Scalaを学んで、リスト内のすべての括弧を一致させバランスを取るために、括弧の数をカウントする関数(再帰的)を作成しています。の文字。かっこが均衡している場合は0を返します。スカラの戻り値が期待通りではない
私は(上で何が起こっているのかを理解するために、多数のprint文で)それを思い付いた:
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)
print文ははロジックが動作していることを確認するように見える、まだ最終的な戻り値が間違っていますか:
(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、終了は-1。 –
再帰呼び出しが返すものについて考えてみてください。 'count +'は何も重複していないと確信していますか? – user2357112