gpt4 book ai didi

scala - 尾递归和副作用

转载 作者:行者123 更新时间:2023-12-01 10:03:52 26 4
gpt4 key购买 nike

我正在学习 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 中,我们希望防止或减少副作用的风险。

也许我理解错了,但谁能给我解释一下这个概念。

谢谢你的帮助

最佳答案

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

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

关于scala - 尾递归和副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12839466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com