Dim*_*tri 3 functional-programming scala tail-recursion
我实际上是在学习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)
}
Run Code Online (Sandbox Code Playgroud)
我的问题是更新参数,acc 因为我们在函数中这样做loop可以视为副作用吗?因为在FP中,我们希望预防或减少副作用的风险.
也许我弄错了,但有人可以向我解释这个概念.
谢谢你的帮助
你实际上并没有在这里改变任何参数的值(因为它们是val定义的,你不能,即使你想要).
您将返回一个新值,该值根据传入的参数计算(仅限于那些).正如@ om-nom-nom在他的评论中指出的那样,是纯函数的定义.