3

我实际上正在学习 scala,我有一个关于尾递归的问题。这是 scala 中带有尾递归的阶乘示例:

    def factorial(n: Int): Int = {

    @tailrec
    def loop(acc: Int, n: Int): Int = {
      if (n == 0) acc
      else loop(n * acc, n - 1)
    }
    loop(1, n)
  }              

我的问题是更新参数,acc 因为我们在函数中这样做loop可以认为是副作用吗?由于在 FP 中,我们希望防止或减少副作用的风险。

也许我弄错了,但有人可以向我解释这个概念。

谢谢你的帮助

4

1 回答 1

7

您实际上并没有在此处更改任何参数的值(因为val根据定义它们是 s,即使您愿意,也不能这样做)。

您正在返回一个新值,该值是根据传入的参数(并且只有那些)计算得出的。正如@om-nom-nom 在他的评论中指出的那样,这是纯函数的定义。

于 2012-10-11T12:32:46.683 回答