Cri*_*llo 1 scala pascals-triangle
我已经实现了 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)
}
}
Run Code Online (Sandbox Code Playgroud)
您的row匹配正在隐藏方法参数。为了实现你想要的,你可以尝试使用所谓的守卫进行模式匹配,例如
case n if n == row => 1
Run Code Online (Sandbox Code Playgroud)
有了这个,你有 3 个案例,0案例,案例时间n is equal to given row parameter和default案例。否则,row匹配将匹配所有不等于 的剩余数字0,这将使_最后的匹配永远不会被触发。
除了 Martin 的回答,您还可以对相同的结果使用反引号:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在例如Scala 编程书籍的相关章节中阅读有关此行为的更多信息(搜索反引号关键字)
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |