Path: csiph.com!eternal-september.org!feeder.eternal-september.org!nntp.eternal-september.org!.POSTED!not-for-mail
From: Tim Rentsch
Newsgroups: comp.lang.c
Subject: Re: MISRA C
Date: Mon, 05 Oct 2026 01:23:07 -0700
Organization: A noiseless patient Spider
Lines: 42
Message-ID: <86ik3gmu8k.fsf@linuxsc.com>
References: <11822bi$39m36$1@dont-email.me> <118pkkd$3gajb$1@dont-email.me> <118q3np$3e19p$2@dont-email.me> <118q63q$3l59m$1@dont-email.me> <118qftr$3nc7i$1@dont-email.me> <119473t$33192$1@dont-email.me> <119493r$33m1o$1@dont-email.me> <1194c7i$34ldb$2@dont-email.me> <1194mqo$37fnf$3@dont-email.me> <1195gqh$23uj$1@news.muc.de> <1195qr8$2aem2$1@dont-email.me> <1195u2r$16ah$1@news.muc.de> <119612d$2aem2$2@dont-email.me> <11962u0$16ah$2@news.muc.de> <1196fb8$3rdj2$1@kst.eternal-september.org> <1196l3v$1b0$1@news.muc.de> <1196nn7$3upk9$1@kst.eternal-september.org> <1197piq$8k7p$1@dont-email.me> <87o6da9yyi.fsf@bsb.me.uk>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Injection-Date: Mon, 05 Oct 2026 08:23:08 +0000 (UTC)
Injection-Info: dont-email.me; logging-data="762729"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX184Iilav3VeUSUlOnrPzLfyR4u9vTInC28="; posting-host="9c7cd6cf42d57b8cdde7cd2072fc92b7"
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock: sha1:PlfwqKn8duy4lWiBolk6SbRrKJs= sha1:zdDktf2QT0eDHbW1V7ysIy/g9m8= sha256:a66F1HrBjE2rJ+tBF10NKO1l895qs/Fkd01kEU9FgOU= sha1:o96rdby32RirH+5pa++trSfSwRk= sha256:aUIuh+p/Ac3mrALYyLMuoJBmsIOdz0d623BjhSq8FeQ=
Xref: csiph.com comp.lang.c:402699
Ben Bacarisse writes:
> Sorry I'm jumping in here. I don't read Usenet much these days but this
> got me going.
>
> David Brown writes:
>
>> You can implement the Ackermann function without explicit
>> recursion, just using a single loop and with allocated stacks or
>> lists to hold the progress. But you /cannot/ do so with a single
>> allocation at the start. If you are asked to calculate A(m, n),
>> you cannot calculate an upper bound on the stack size you need
>> without calculating the function.
>
> Hmm... This is likely to confuse people. You can calculate A(m,n)
> using O(m) extra space. You can pre-allocate the space you need
> before starting the calculation. (Aside: this disregards the space
> needed to store the numbers. A(m, n) grows so large that you need
> extra space just to store the integers, but that complicates the
> discussion and I think everyone has been ignoring it in this thread
> anyway.)
>
> A carefully written recursive version will also use only O(m)
> stack, but here we get into problems of definition. Given that
> there is an iterative version that needs only O(m) extra storage
> there is obviously a trivial recursive version of that function
> that, say, just pointlessly calls itself once!
I don't see what you're getting at here. The idea that A(m,n)
can be computed with only O(m) space, for any n, goes against
both my intuition and what I remember from my recursive function
theory course (quite a long time in the past now). At the very
least it seems to require a radically different formulation of
how the Ackermann function is defined. Can you elaborate how,
for example, A(m,n) can be computed by a recursive function with
O(1) local variables but a call depth that never exceeds O(m)?
By the way, I think I know what you're getting at with extra
storage needed to store the numbers, but we need to be careful
here. If we are allowed variables that hold arbitrary precision
integers then surely any computable function can be calculated
using only O(1) such variables.