Поиск max в массиве с помощью рекурсии

#c #recursion

#c #рекурсия

Вопрос:

Предположим, у меня есть следующие объявления:

 int arr[5] = {1,10,9,28,3};
int low = 0;
int high = 4; 
int largest = findLargest(ar, low, high);
  

Я предполагаю написать функцию «findLargest» с использованием рекурсии, и это то, что я получил

  int findLargest(int arr[], int low, int high)
 {      
    if (low == high)
        return arr[low];
    return max(arr[low], findLargest(arr, low 1, high));
 }
  

Результат был 28 , который и ожидался. Однако я не совсем понимаю, как эта рекурсивная функция «сравнивает» значения. (Под этим я подразумеваю, что я не вижу никаких операторов, таких как > , < . Единственный оператор, который я вижу, это == ). Итак, как эта рекурсивная функция сравнивает значения в массиве?

Комментарии:

1. std::max выполняет сравнение.

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

Ответ №1:

Рекурсия использует std::max функцию, которая использует operator< . Максимум подмассива [a;b] — это максимум между a и максимум подмассива [a 1;b] (то есть a if a = b ).