gpt4 book ai didi

scala - 如何在scala中进行递归循环

转载 作者:行者123 更新时间:2023-12-04 15:26:03 25 4
gpt4 key购买 nike

我想知道是否有更好的方法在 Scala 中编写递归循环。

def fib(n: Int) = {
def loop(a: BigInt = 0, b: BigInt = 1, n: Int = n): BigInt = {
if(n==0) a
else loop(b, a+b, n-1)
}
loop()
}

我可以这样写
def fib(n: Int, a: BigInt = 0, b: BigInt = 1): BigInt = {
if(n==0) a
else fib(n-1, b, a+b)
}

但随后 a 和 b 将被暴露,不再封装在方法中。

最佳答案

请注意,您可以经常使用 foldLeftfoldRight在这种情况下:

def fib(n: Int) = (1 to n).foldLeft((BigInt(0),BigInt(1)))((p,_)=>(p._2,p._1+p._2))._1

[编辑]

另一种方法是基于迭代器的解决方案:
def fib = Iterator.iterate((0,1)){case (x,y) => (y,x+y)}.map(_._1)

这会生成无限数量的斐波那契数,但您可以简单地从中获取任意数量的数字,例如 fib.take(10).toList

关于scala - 如何在scala中进行递归循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8100132/

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