C ++ рекурсивный поиск в массиве по наименьшему индексу

0

Я пытаюсь найти самый низкий индекс значения в пределах диапазона, который находится в массиве, переданном рекурсивной функции.

int find(int arry[], int length, int lower, int upper){
    if(length>1)
        find(arry,length-1,lower,upper);
    if(arry[length-1]>=lower && arry[length-1]<=upper)
        return length-1;
    if(length==0)
        return -1;
}

вызов функции:

int arry[]={9,2,6,3,2,3};
    cout << "Index is: " << find(arry,6,2,3)

Это работает, чтобы найти значение самого высокого индекса... но как мне вернуться? поэтому, когда функция находит значение, оно ее флага и не будет переопределять возвращаемое значение с другим? Я не могу изменить список параметров, чтобы добавить флаг, и я не хочу использовать статические переменные.

благодарю!

  • 4
    std::min_element(arry,arry+6)-arry ... о, подождите, вы делаете это для hw, не так ли?
  • 1
    Почему рекурсия? Значения не отсортированы, поэтому бинарный поиск не будет работать.
Показать ещё 1 комментарий
Теги:
arrays
recursion
search

1 ответ

0
Лучший ответ

Попробуйте следующую рекурсивную функцию

int find( const int array[], int length, int lower, int upper )
{
    if ( length == 0 ) return -1;

    if ( array[0] >= lower && array[0] <= upper ) return 0;

    int n = 1 + find( array + 1, length - 1, lower, upper );
    return ( n == 0 ? -1 : n ); 
}

Что касается вашей реализации, то это неверно, по крайней мере, из-за первых утверждений

if(length>1)
    find(arry,length-1,lower,upper);

Здесь находка называется напрасно. Его результат не используется.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню