#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
).