継続渡しスタイル

rubyの場合は継続の受け渡しにブロック構文を使うといい感じに書けるんだな。
同じく階乗の例。

def fact(n)
  n==0 ? yield(1) : fact(n-1){|r|yield(n*r)}
end
fact(4){|r|puts r}