O'Caml で質問です。

let rec foo_a n f a =
if n=0
then a
else foo_a (n-1) f (f a)

let foo_b n f a =
let rec iter n a =
if n=0
then a
else iter (n-1) (f a) in
iter n a

foo_b より foo_a の方が速いのなぜですか。
もっといい書き方はありますか。