I had a homework assignment that asked for a function that uses direct recursion to find the index of the left-most, lowest, negative integer in an array. Additional requirements were for the parameters of the function to be the array and the size and that the return value for no valid value was -999.
I came up with this:
int LowIndexMinNeg(int src[], int size)
{
if (size == 0)
return -999;
int index = LowIndexMinNeg(src, size - 1);
if (index >= 0)
return (src[size - 1] < src[index]) ? (size - 1) : index;
else
return (src[size - 1] < 0) ? (size - 1) : index;
}
It works, satisfies the requirements, and got me full credit. Can this be implemented with tail recursion?
It seems to me that since you have to take the result from the recursive call to use in a comparison to decide if you pass that one on or update it that it wouldn’t be possible but recursion still ties my brain in knots a it so there might be something obvious that I’m missing.
Note: My homework assignment was already turned in and graded.
You need to store the lowest number found so far somewhere. With your function you’re using the stack
to store that.
With a tail recursive function you’ll need to store the lowest number found so far elsewhere.
e.g:
The requirement you have for your function probably rules out all those, so you’re left with something like the code you have, which cannot be written to be tail-recursive.
To get an idea of e.g. the 2 last point:
And