I’m doing a program to sum all odd numbers up to n:
oddSum' n result | n==0 = result
| otherwise = oddSum' (n-1) ((mod n 2)*(n)+result)
oddSum n = oddSum' n 0
I’m getting a two erros for for my inputs (I’ve put them below), I’m using tail recursion so why is the stack overflow happening? (note: I’m using Hugs on Ubuntu)
oddSum 20000
ERROR – Control stack overflow
oddSum 100000
ERROR – Garbage collection fails to reclaim sufficient space
You are building a huge thunk in the
resultvariable.Once you evaluate this, all the computations have to be done at once, and then the stack overflows, because, to perform addition, for example, you first have to evaluate the operands, and the operands of additions in the operands.
If, otoh, the thunk gets too big, you get a heap overflow.
Try using
in the recursion.