1. torao@github

    No comment

    torao@github
Changes in body
Source | HTML | Preview
@@ -1,12 +1,14 @@
Scala ではコンパイラや JavaVM では最適化されない末尾相互再帰を **Trampoline** (トランポリン) を使って解決します。また末尾再帰になっていない再帰処理をコールスタックを消費しないで実行するためにも Trampoline を使用します。
-## Scala の末尾相互再帰
+C/C++/Java 暦が長いんで末尾最適化されずコールスタック量も想定できない処理は自前でループに書き換えていましたけど、後述する問題を Trampoline で解決できないかなと知識まとめがてらの投稿です。
-関数やメソッドの再帰呼び出しは、その再帰が処理の一番最後であれば理論的にループ命令に展開できます。これは再帰ごとにその呼び出しのコールスタックをクリアしても問題ないためで、ループの方がコールスタックを消費しないので再帰がどれだけ深くなっても一定量のスタック空間で済む (Stack Overflow が起きない) という利点があります。
+## 前提知識: Scala の末尾相互再帰
-ざっくりコードで示せば以下のような変換を Scala コンパイラが自動で行ってくれる。
+関数やメソッドの再帰呼び出しはその再帰が処理の一番最後であれば理論的にループ命令に展開できます。これは再帰ごとにその呼び出しのコールスタックをクリアしても問題ないためで、ループの方がコールスタックを消費しないので再帰がどれだけ深くなっても一定量のスタック空間で済む (Stack Overflow が起きない) という利点があります。
+
+ざっくりコードで示せば以下のような変換を Scala コンパイラが自動で行ってくれるという意味です
```scala
def A():X = {
何かの処理
if(終了条件) 結果 else A()