末尾再帰VS普通の再帰JAVAちょっと気になったんで、実験してみた。Lispの方言の一つschemeを使い始めてからは、基本的に私は再帰呼び出しの書き方が末尾再帰で書く様になったんだけど、よくよく思い返してみればJavaでデバッグするときにスタック破棄されてない様な......。スタックが破棄されないんだったら末尾再帰する意味なんて無いんだど。いうわけで、実験してみた。203この結果では、Javaは末尾再帰呼び出しをすると遅い。引数の数の差が速度の差になったのだろうと思う。ちなみに、loop2(100000,0)などと呼び出すとエラーが出る。スタックは破棄されていない。実際にはこんなものfor文なりを使えばいいから問題ないのだが、呼び出す関数は同じでもオブジェクトが違う場合は(これを再帰とは言わないのかも知れないが)末尾再帰の形にしない方がパフォーマンスは上がるのかも知れない。ちなみに、こんな記事がありました。Javaコードのパフォーマンスを向上させる記事の言っていることは分かるけど、実行時にスタックオーバーフロー起きないよう末尾再帰時のスタック管理ぐらいは最適化しても良いんじゃないかなぁ、とか思ったり。*1:実際にはJavaが安定するまでの時間を考慮して、最初に処理を待つ処理がありますが、わかりやすさのため削りました。05:26関連記事2016-11-28Java9のVarHandleを使ってみた注意:この記事はJava9が公開される前、アーリーアクセス版時代...2013-12-11JOGL,JOCLのEclipse環境を整える2年ぶりぐらいにJOCL書くかーって思って環境整えようとしたら結...2011-06-11高速フーリエ変換(FFT)の解説。»プロフィールJavaで画像AI屋だったハズが、気がついたら制御論理やってて、Eclipse開発してて、組み込み屋で、CortexM4周りの開発してて、VerilogでRTL書いてて、STAしてて、色んな小さいインフラ管理してる、何でも屋。働きたくないでござる。(14)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。