Следующее может вызвать переполнение стека для больших 'n', и я могу понять, почему.
def factorial(n)
(n > 1) ? (return (n * factorial(n - 1))) : (return 1)
end
Почему следующее также вызывает переполнение?
def factorial(n, k)
(n > 1) ? (return factorial(n - 1, lambda {|v| return k.call(v * n)})) : (return k.call(1))
end