我已经实现了pascal的三角形,但是它出了问题,因为col match { case row => ...}
它没有正确匹配col与行:
def main(args: Array[String]) {
println("Pascal's Triangle")
for (row <- 0 to 10) {
for (col <- 0 to row) {
val res: Int = pascal(col, row)
print(res + " ")
}
println()
}
def pascal(col: Int, row: Int): Int = {
col match {
case 0 => 1
case row => 1
case _ => pascal(col-1, row-1) + pascal(col, row-1)
}
}
答案 0 :(得分:4)
您的row
匹配正在影响方法参数。为了达到你想要的效果,你可以尝试使用所谓的防护来进行模式匹配,例如
case n if n == row => 1
有了这个,你有3个案例,0
案例,n is equal to given row parameter
和default
案例。否则,row
匹配将匹配不等于0
的所有剩余数字,这将使最后的_
匹配永远不会被触发。
答案 1 :(得分:4)
除了马丁的回答之外,您还可以使用反引号获得相同的结果:
def pascal(col: Int, row: Int): Int = {
col match {
case 0 => 1
case `row` => 1
case _ => pascal(col-1, row-1) + pascal(col, row-1)
}
}
您可以在Programming in Scala book的相关章节中搜索有关此行为的更多信息(搜索反引号关键字)