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