У меня было задание на домашнее задание, в котором попросила функцию, которая использует прямую рекурсию, чтобы найти индекс самого левого, самого низкого и отрицательного целых чисел в массиве. Дополнительные требования были для параметров функции как массива и размера, а возвращаемое значение для допустимого значения не было -999.Возможно ли рекурсия хвоста, если сравнение зависит от возвращаемого значения?
Я пришел с этим:
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;
}
Он работает, удовлетворяет требованиям, и у меня полный кредит. Можно ли это реализовать с помощью хвостовой рекурсии?
Мне кажется, что, поскольку вы должны принять результат от рекурсивного вызова, чтобы использовать его для сравнения, чтобы решить, передаете ли вы это или обновите его, что это будет невозможно, но рекурсия все еще связывает мой мозг в сучки, так что может быть что-то очевидное, что я пропал без вести.
Примечание: мое домашнее задание уже было повернуто и градуировано.
Я не вижу, как дано Требование подписи –
Спасибо всем за ваши ответы. Все они были полезны для повышения моего понимания. – Matt