scala函数变量不能改变

jsh*_*303 0 recursion scala 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
}
Run Code Online (Sandbox Code Playgroud)

问题在于变量似乎无法像线条那样改变

x0=functionB(c, x0)
n--
Run Code Online (Sandbox Code Playgroud)

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

Bri*_*ent 8

函数参数是valScala 中的s,因此您无法修改它们.

递归写你的函数.就像是:

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)
  }
}  
Run Code Online (Sandbox Code Playgroud)

  • 最后一行应该是递归调用.(也许最好让Scala编译器通过`@tailrec`注释验证我们的意图!) (2认同)