使用scala学习函数式编程。偶然发现了这个练习。
写一个递归函数来得到第n个斐波那契数(http://mng.bz/C29s)。斐波那契数列的前两个数字是0和1。第n个数字总是前两个数字的和--序列从0,1,1,2,3,5开始。你的定义应该使用局部尾递归函数。
def fib(n: Int): Int
我的答案计算n+1个值并返回第n个。谁能给我一个更好的实现,其中额外的第n+1个值不计算?
object patterns {
def fib(n : Int): Int = {
@annotation.tailrec
def go(n: Int, prev2: Int, prev: Int): Int =
if(n<=0) prev2
else go(n-1, prev, prev2+prev)
go(n, 0, 1)
}
}
如果有人感兴趣的话,这是Chiusano和Bjarnason写的《Scala中的函数式编程》一书。练习2.1期待答复。
3条答案
按热度按时间j8ag8udp1#
我认为:
或者使用ByName参数:
prdp8dxp2#
我喜欢用
stream
来实现它。因为代码更短,更容易理解。获取
nth
很简单,可以调用fibo.drop(n-1)(0)
omhiaaxx3#