Try to fix the loop function inside fib so that it returns the correct values for each case in a tail-recursive way. What should the missing expressions for the trivial case and the recursive call be?
def fib(n: Int): Int = {
  @annotation.tailrec
  def loop(n: Int, prev: Int, cur: Int): Int =
    if (n <= __ ) prev
    else loop(n - __, cur, prev + cur)
  loop(n, 0, 1)
}
Explanation
Let’s consider example: fib(6)
This is how the calls of loop look like:
loop(6, 0, 1)
loop(5, 1, 1)
loop(4, 1, 2)
loop(3, 2, 3)
loop(2, 3, 5)
loop(1, 5, 8)
loop(0, 8, 13)
At the last step, loop has already been called 6 times, n==0 and the result is 8.
13 is the result of the next iteration.

Source: Scala Exercises: Getting started with functional programming

Следи за CodeGalaxy

Мобильное приложение Beta

Get it on Google Play
Обратная Связь
Продолжайте изучать
тесты по Scala
Cosmo
Зарегистрируйся сейчас
или Подпишись на будущие тесты