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