uplink.coder at googlemail.com
Sun Aug 2 17:27:43 UTC 2020
On Sunday, 2 August 2020 at 15:04:07 UTC, Paul Backus wrote:
> On Sunday, 2 August 2020 at 12:31:00 UTC, Stefan Koch wrote:
>> Take this for example.
>> int iota(int start, int finish)
>> int result = ;
>> result.length = finish - start;
>> foreach(i;start .. finish)
>> result[i - start] = i;
>> return result;
>> Whereas the recursive function for this,
>> is something I do not even want to put on here.
>> Because it's way to complicated for this simple task.
> In fact, the naive recursive version of iota is actually even
> int iota(int start, int finish)
> if (start > finish)
> return ;
> return [start] ~ iota(start + 1, finish);
> Again, the problem with this function is not complexity or
> readability, but performance. It performs many unnecessary
> memory allocations, and consumes (finish - start) stack frames
> instead of 1.
How is that easier?
It requires you to have a stack, which also means that you have
to keep track of the stack frames in order to execute this in
this particular function allocates N literals array + and does N
Which when naively implemented consumes N*N + 2N words of memory.
More information about the Digitalmars-d