我是一个Scala初学者。我在学习Functional Programming in Scala。但我面对这个问题时,我做的第一exercise.here是第一个练习:我的Scala代码在第一个练习的Scala中的函数式编程原理有什么问题
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
在三角形的边缘都是1号,以及三角形内的数值 是的总和它上面的两个数字。编写一个 函数,通过递归过程计算帕斯卡三角形的元素。
通过执行main.scala中的pascal函数 来完成此练习,该函数采用列c和行r,从0开始计数并返回该三角形中该点处的 数字。例如,pascal(0,2)= 1, pascal(1,2)= 2和pascal(1,3)= 3。
这是我的第一个代码:
package recfun
object Main {
def main(args: Array[String]) {
println("Pascal's Triangle")
for (row <- 0 to 10) {
for (col <- 0 to row)
print(pascal(col, row) + " ")
println()
}
}
var i = 0
/**
* Exercise 1
*/
def pascal(c: Int, r: Int): Int = {
if(c==r||c==0)
1
else
i = pascal(c - 1, r - 1) + pascal(c, r - 1)
i
}
/**
* Exercise 2
*/
def balance(chars: List[Char]): Boolean = ???
/**
* Exercise 3
*/
def countChange(money: Int, coins: List[Int]): Int = ???
}
,但我得到这个结果
0
0 0
0 0 0
0 0 0 0
0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
然后我试图改变我的代码,我也得到正确的结果。
package recfun
object Main {
def main(args: Array[String]) {
println("Pascal's Triangle")
for (row <- 0 to 10) {
for (col <- 0 to row)
print(pascal(col, row) + " ")
println()
}
}
/**
* Exercise 1
*/
def pascal(c: Int, r: Int): Int = {
if(c==r||c==0)
1
else
pascal(c - 1, r - 1) + pascal(c, r - 1)
}
/**
* Exercise 2
*/
def balance(chars: List[Char]): Boolean = ???
/**
* Exercise 3
*/
def countChange(money: Int, coins: List[Int]): Int = ???
}
我想知道为什么我的第一个代码是worng?
谢谢,我误解了if语句的then部分已经执行后,函数结束并返回结果。像c编程语言一样。 –
没问题,如果你对每个块的条件都使用了大括号将会很好,如果它对你有帮助,你可以投票。 –
对不起,我不能投票,因为我的名声较差。 –