再帰関係のABC
再帰関係のABCを淡々と貼るよ。callerとcalleeは意図的に無視してるよ。あと、Yコンビネータとか。
普通の再帰
function forever(){ forever(); }
var undefined():* /* disp_id 0*/ { // local_count=1 max_scope=0 max_stack=1 code_len=7 0 findpropstrict forever 2 callproperty forever (0) 5 pop 6 returnvoid }
末尾再帰の最適化はしないのか。読みやすいからいいんだけど
だいたい1000回でオーバーフローする。
相互再帰
function f(){ g(); } function g(){ f(); }
// f var undefined():* /* disp_id 0*/ { // local_count=1 max_scope=0 max_stack=1 code_len=7 0 findpropstrict g 2 callproperty g (0) 5 pop 6 returnvoid } // g var undefined():* /* disp_id 0*/ { // local_count=1 max_scope=0 max_stack=1 code_len=7 0 findpropstrict f 2 callproperty f (0) 5 pop 6 returnvoid }
無名関数による再帰
無名関数による再帰。これ、Javascriptではできない、って話なかった?
ABC的には普通の再帰と同じ。
var fact = function(){ fact(); };
var undefined():* /* disp_id 0*/ { // local_count=1 max_scope=0 max_stack=1 code_len=7 0 findpropstrict fact 2 callproperty fact (0) 5 pop 6 returnvoid }