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