Я подозреваю, что это домашняя работа, чтобы научить подходить к проблемам с Разделяй и властвуй . Это разбивает проблему на две более простые подзадачи, которые затем решаются рекурсивно. Обычно это полезно для сортировки и поиска.
Просто найти наименьший элемент в списке - это перебор, это O (nlogn), где простым циклом будет O (n), но он обучает технике. Я надеюсь.
В этом случае вы найдете наименьший элемент массива, разделив его на две половины, найдя наименьший элемент из этих половин, а затем взяв минимум из них. Вы продолжаете расщепление, пока у вас не будет только одного элемента, который завершает рекурсию.
@ chux уже написал код , мне не нужно повторять это.
Почему они хотят, чтобы вы делали это, начиная с определенного индекса, не имеет большого смысла. Я подозреваю, что на самом деле вы должны использовать среднюю точку, чтобы разделить массив пополам и выполнить рекурсивные операции, например ...
int findMin(int arr[], int start, int len) {
assert(len > 0);
if(len == 1 ) {
return arr[start];
}
int mid = len/2;
int left_min = findMin(arr, start, mid);
int right_min = findMin(arr, mid, len - mid);
return left_min < right_min ? left_min : right_min;
}
int main(void) {
int array[7]= {23,17,8,7,9,32,56};
printf("%d\n", findMin(array, 0, 7));
}
Это избавляет от необходимости выполнять арифметику указателей. Арифметика с указателями, как правило, быстрее и проще, но часто ее обучают только позже.