再帰関数で、return時に再帰呼出しをする方法。
コールスタックを節約できるので、スタックオーバーフローを回避できる。
OCamlではコンパイラにより、ループの形に最適化される。
# 末尾再帰未対応
def func(x)
if x <= 1
return 1
else
return x + func(x - 1)
end
end
# 末尾再帰対応
def func_m(x, a = 1)
if x <= 1
return a
else
return func_m(x - 1, x + a)
end
end