![](https://cdn-ak-scissors.b.st-hatena.com/image/square/ca35740945bab4d2203e690517efd99e93344653/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2Fb7efe2f944a84c468b77d28f094a3085%2Fslide_0.jpg%3F17939205)
エントリーの編集
![loading...](https://b.st-hatena.com/bdefb8944296a0957e54cebcfefc25c4dcff9f5f/images/v4/public/common/loading@2x.gif)
エントリーの編集は全ユーザーに共通の機能です。
必ずガイドラインを一読の上ご利用ください。
記事へのコメント33件
- 注目コメント
- 新着コメント
![turanukimaru turanukimaru](https://cdn.profile-image.st-hatena.com/users/turanukimaru/profile.png)
turanukimaru
再帰を書きたい側からすれば、無限ループならともかく高々数万回の再帰で stack over flow するんじゃねぇよみたいな感覚だからな…私は階層数を把握してるときしか再帰書かないけど気にせず無限に再帰させたいときも有る
![gengesa gengesa](https://cdn.profile-image.st-hatena.com/users/gengesa/profile.png)
gengesa
末尾再帰最適化は末尾再帰は自明にループにできるからできることなので、末尾再帰ではない=自明なループにしづらい再帰のときのほうが再帰で書きたくて最適化を期待して末尾再帰で書くくらいなら普通にループで書く
![Magicant Magicant](https://cdn.profile-image.st-hatena.com/users/Magicant/profile.png)
Magicant
非同期処理の結果を処理するのにコールバックが必要になったりするが、それをループ内でやった時にスタックオーバーフローするかどうかはかなり自明ではないので、末尾最適化への需要はあるだらうな
![tkmkg8m tkmkg8m](https://cdn.profile-image.st-hatena.com/users/tkmkg8m/profile.png)
tkmkg8m
Safariだけ実装→MozillaとMSが反対→Chromeが代替案→Safariが反対→今って状況だったのか。知らなかった。JavaScriptはブラウザベンダー間の調整とか互換性とかしんどそうね。
![UhoNiceGuy UhoNiceGuy](https://cdn.profile-image.st-hatena.com/users/UhoNiceGuy/profile.png)
UhoNiceGuy
TCOは関数呼び出しの帰り先を元関数の帰り先にするだけ(callの直後がretだったらjumpに代える)なので特殊な構文解析は必要ないんだけどね//組み込みでは再帰呼び出し自体使用禁止なそうな(ISO26262)
![NetPenguin NetPenguin](https://cdn.profile-image.st-hatena.com/users/NetPenguin/profile.png)
NetPenguin
一方、scalaは@tailrecアノテーションを、kotlinはtailrecキーワードを使用した!(javascriptも当初の時点で明示する方法を取れていたらよかったのにね……(´・ω・`))(ちな、scalaはアノテーション無くても展開してくれる)
![tkmkg8m tkmkg8m](https://cdn.profile-image.st-hatena.com/users/tkmkg8m/profile.png)
tkmkg8m
Safariだけ実装→MozillaとMSが反対→Chromeが代替案→Safariが反対→今って状況だったのか。知らなかった。JavaScriptはブラウザベンダー間の調整とか互換性とかしんどそうね。
![yarumato yarumato](https://cdn.profile-image.st-hatena.com/users/yarumato/profile.png)
yarumato
“末尾で自分を呼び出す(return function self)関数を末尾再帰関数と呼ぶ。最適化は速度ではなくメモリ消費を抑える。実質的には再帰からループへの変換。JSはSafari以外で未実装。実装拒否された歴史。自分で実装しよう”
![turanukimaru turanukimaru](https://cdn.profile-image.st-hatena.com/users/turanukimaru/profile.png)
turanukimaru
再帰を書きたい側からすれば、無限ループならともかく高々数万回の再帰で stack over flow するんじゃねぇよみたいな感覚だからな…私は階層数を把握してるときしか再帰書かないけど気にせず無限に再帰させたいときも有る
![gengesa gengesa](https://cdn.profile-image.st-hatena.com/users/gengesa/profile.png)
gengesa
末尾再帰最適化は末尾再帰は自明にループにできるからできることなので、末尾再帰ではない=自明なループにしづらい再帰のときのほうが再帰で書きたくて最適化を期待して末尾再帰で書くくらいなら普通にループで書く
![Magicant Magicant](https://cdn.profile-image.st-hatena.com/users/Magicant/profile.png)
Magicant
非同期処理の結果を処理するのにコールバックが必要になったりするが、それをループ内でやった時にスタックオーバーフローするかどうかはかなり自明ではないので、末尾最適化への需要はあるだらうな
注目コメント算出アルゴリズムの一部にLINEヤフー株式会社の「建設的コメント順位付けモデルAPI」を使用しています
![アプリのスクリーンショット](https://b.st-hatena.com/bdefb8944296a0957e54cebcfefc25c4dcff9f5f/images/v4/public/entry/app-screenshot.png)
いまの話題をアプリでチェック!
- バナー広告なし
- ミュート機能あり
- ダークモード搭載
2021/04/24 リンク