末尾呼び出しの除去
tail call elimination
1つの関数においてはそれほどありがたみがないが、対象が再帰関数だと大きな効能が得られる
このページでは再帰関数であることは前提しないものとして記述する
code:js
const f = () => {
...
return g();
}
fの返り値は、gの返り値である
スタックフレームを積まずにgに移行し、gのリターンアドレスは、fのものを引き継ぐ 普通ならここでg用のスタックフレームを作るが、これを作らないことを「末尾呼び出しの除去」と呼ぶ
たすかったmrsekut.icon*2
コールスタックの具体例もあってわかりやすい