原です。

>酒井です。

>class Proc
>   def self.new_rec(&block)
>     selF = new{|*args| block[selF, *args] }
>   end
>end
>
>p Proc.new_rec{|selF,n| n.zero? ? 1 : n * selF[n - 1]}[5] #=> 120

うぐっ。正しい!!!