【发布时间】:2010-09-12 21:26:21
【问题描述】:
我正在编写一个函数来查找triangle numbers,而编写它的自然方式是递归:
function triangle (x)
if x == 0 then return 0 end
return x+triangle(x-1)
end
但尝试计算前 100,000 个三角形数会在一段时间后因堆栈溢出而失败。这是memoize 的理想函数,但我想要一个能够记住我传递给它的任何函数的解决方案。
【问题讨论】:
-
查看this blog post 了解通用 Scala 解决方案,最多 4 个参数。
-
为什么每个人都在编写复杂、缓慢的递归函数?它只是 n*(n-1)/2。请看下面我的回答。它是在 java 中,而不是 Lua,但仍然可以理解。
-
@Fractaly:非常正确。然而,
triangle函数不是问题的主旨,它实际上是在询问一个稍微深奥的概念。尽管如此,这仍然是解决问题的最佳方法。太好了,事实上,它已经是suggested。 -
感谢您指出这一点。有很多答案,我想我错过了。这似乎是一个糟糕的记忆示例案例,因为它实际上并不需要它。
-
@Fractaly:那时我还年轻又傻……
标签: optimization recursion lua closures memoization