scala函数变量不能改变

时间:2014-01-22 03:36:20

标签: scala recursion tail-recursion

我有几行scala代码定义了一个函数A,它重复调用functionB直到n为零(函数B n次)。每次迭代n减少1,并且如上所述更新x0。

def functionA(c: Double, x0: Double, n: Int): Double = {
    require(x0>0) //This is a must
    while(n>0){
       x0=functionB(c, x0) //functionB predefined
       n--
    }
   x0
}

问题在于变量似乎无法改变,如行

x0=functionB(c, x0)
n--

正在返回错误。如果当前结构没有改变并且总行数保持不变,我该如何正确地写行?

1 个答案:

答案 0 :(得分:8)

Scala中的函数参数为val,因此您无法修改它们。

递归编写函数。类似的东西:

def functionA(c: Double, x0: Double, n: Int): Double = {
  require(x0 > 0) //This is a must
  if (n < 0) {
    x0
  } else {
    functionA(c, functionB(c, x0), n - 1)
  }
}