下面的函数生成n的“层叠级别过深(SystemStackError)” = 5000可以使用continuations作为递归的替代吗?
def factorial(n)
n == 0 ? 1 : factorial(n -1) * n
end
有没有办法避免这种错误使用continuation/callcc?
注:
我知道这样做不会递归执行。例如
def factorial2(n)
(1..n).inject(1) {|result, n| result * n }
end
您不需要参数注入,它默认为它被调用的Enumerable的第一个元素。还有一个Ruby支持Symbol#to_proc(1.8.7+,1.8.6 + Facets),你可以这样写factorial2: (1..n).inject(&:*) – 2010-03-17 09:16:07