【发布时间】:2011-01-28 09:11:39
【问题描述】:
以下函数为 n = 5,000 生成“堆栈级别太深 (SystemStackError)”
def factorial(n)
n == 0 ? 1 : factorial(n -1) * n
end
有没有办法使用 continuations/callcc 来避免这个错误?
注意:
我知道这可以在没有递归的情况下实现。例如
def factorial2(n)
(1..n).inject(1) {|result, n| result * n }
end
【问题讨论】:
-
您不需要注入参数,它默认为调用它的 Enumerable 的第一个元素。同样使用支持 Symbol#to_proc (1.8.7+, 1.8.6 + Facets) 的 Ruby,您可以像这样编写 factorial2:(1..n).inject(&:*)
标签: ruby recursion continuations