Well re-watched a video regarding the Ackermann function which
is a heavily recursive code which may or may not ever give a
result in our lifetimes. However relying on the power of memoize
I quickly find that when the program dies (from 5 minutes or so)
nearly instantly (and only using 9Mb of memory).
long ack(long m, long n) {
long ans;
if (m == 0) ans = n + 1;
else if (n==0) ans = ack(m-1, 1);
// else ans = ack(m-1, ack(m, n-1)); // original
else ans = memoize!ack(m-1, memoize!ack(m, n-1));
return ans;
}
This is only due to the limited stackframe space. Doing a search
I find that the amount of stack space is decided on when the EXE
is being compiled and in the EXE header but I'm not sure which
one needs to be update (supposedly it's either 250k or 1Mb is the
default), although neither help in this case, nor do the other
binary tools as they don't recognize the binary format of D's exe
output files)
Alternatively if there's a way to tell the compiler a hint
(either in D or in the compiling/linking flags) or the specific
offset of which 32bit entry is the stack reserved space, I could
continue my little unimportant side experiments.
Suggestions? Comments?