FP in Scala勉強メモ

p.26 EXERCISE 2.1 n番目のフィボナッチ数を求める関数fib(n: Int): Intを末尾再帰で書く


脳内イメッジ

def fib(n: Int): Int = {
  def f(n: Int, a: Int, b: Int): Int = {
    if (n == 1) a
    else if(n == 2) b
    else f(n-1, b, a+b)
  }
  f(n, 0, 1)
}
  • 最初からnまで少しずつ道を伸ばしていくイメージ。
  • 次のフィボナッチ数を計算するために、fは現在の右端とそのひとつ左の2つの引数を受け取れるようにする
  • で、windowがスライドしていくイメージで一個ずつ右へずらしてく
  • a1とa2は決まっている(0と1)ので、nが2以上の時はfを初期呼び出しを除いてn-2回繰り返せば答えに到達する(右端がnになる)
  • nが1以下の時は必ず0