def recursion *h, &block
f = lambda &block
g = nil
g = lambda{|*h| f.call(g, *h)}
g.call(*h)
end

a = recursion 6 do |rec, n|
if n == 0
1
else
n * rec.call(n-1)
end
end
p a