Возможна ли хвостовая рекурсия, если сравнение зависит от возвращаемого значения?

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

Он работает, удовлетворяет требованиям и получил мне полный кредит. Можно ли это реализовать с помощью хвостовой рекурсии?

Мне кажется, что, поскольку вы должны взять результат рекурсивного вызова для использования в сравнении, чтобы решить, передаете ли вы его или обновляете, это было бы невозможно но рекурсия по-прежнему связывает мой мозг узлами, поэтому может быть что-то очевидное, чего я упускаю.

Примечание: Мое домашнее задание уже сдано и проверено.

18
задан Matt 9 November 2010 в 21:06
поделиться