フィボナッチ数を計算する 2 つの関数を次に示します。どちらも正しく機能しますが、別の方法で記述されています。
どちらがより良く、より効率的で、コードがより理解しやすいと思いますか?
let fibe n =
let rec loop acc1 acc2 n =
match n with
| n when n = 0I -> acc1
| x -> loop acc2 (acc1 + acc2) (x - 1I)
loop 0I 1I n
let myfib n =
if n = 0I then 0I
else if n = 1I then 1I
else
let rec loop i f s =
match i with
| x when x = n -> f+s
| x when x < n -> loop (i+1I) s (s+f)
loop 2I 0I 1I