端的に言って、recursion が、
呼び出し終了後も次回に備えて状態を持つのなら、
状態を持つ=オブジェクト なので、
recursion をオブジェクトにすればよい。
特に関数としての性質が強いものなら、
関数をどうにかしてオブジェクトにすれば良い。(いわゆる関数オブジェクト)
Rubyでどうするのかは専門外なので詳しくは良く知らんが、とりあえず、
>>723のようにすれば、状態を持つlambdaオブジェクトは作れた。
counter = Proc.new{ counter=0; lambda{ counter+=1 } }.call
上記がそんなに長いとは思わん。