【发布时间】:2013-01-22 21:17:03
【问题描述】:
我正在做一个程序来将所有奇数相加,直到 n:
oddSum' n result | n==0 = result
| otherwise = oddSum' (n-1) ((mod n 2)*(n)+result)
oddSum n = oddSum' n 0
我的输入有两个错误(我把它们放在下面),我正在使用尾递归,为什么会发生堆栈溢出? (注意:我在 Ubuntu 上使用 Hugs)
奇和 20000 错误 - 控制堆栈溢出
奇和 100000 错误 - 垃圾回收未能回收足够的空间
【问题讨论】:
-
尝试用
ghc -O编译它,它的严格分析器可能会在第二个参数中检测到oddSum'是严格的,并插入所需的seq本身。
标签: haskell stack stack-overflow