Функция может быть записана следующим образом
#include <iostream>
int find(int value, int* folge, int max)
{
if (max == 0) return -1;
int middle = max/2;
if (folge[middle] == value) return middle;
bool lower = value < folge[middle];
int n = lower ? find(value, folge, middle)
: find(value, folge + middle + 1, max - middle - 1);
return n != -1 && !lower ? n + middle + 1: n;
}
int main()
{
int const n = 7;
int wert1 = 4, wert2 = 13, wert3 = 2, wert4 = 25;
int folge[n] = {3,4,9,13,13,17,22};
std::cout << wert1 << " = " << find(wert1, folge, n) << std::endl;
std::cout << wert2 << " = " << find(wert2, folge, n) << std::endl;
std::cout << wert3 << " = " << find(wert3, folge, n) << std::endl;
std::cout << wert4 << " = " << find(wert4, folge, n) << std::endl;
return 0;
}
Выход программы
4 = 1
13 = 3
2 = -1
25 = -1
Или еще одна тестовая программа
#include <iostream>
int find(int value, int* folge, int max)
{
if (max == 0) return -1;
int middle = max/2;
if (folge[middle] == value) return middle;
bool lower = value < folge[middle];
int n = lower ? find(value, folge, middle)
: find(value, folge + middle + 1, max - middle - 1);
return n != -1 && !lower ? n + middle + 1: n;
}
int main()
{
int const n = 7;
int folge[n] = {3,4,9,13,13,17,22};
for (int x : { 2, 3, 4, 9, 13, 17, 22, 25 })
{
std::cout << x << " -> " << find(x , folge, n) << std::endl;
}
return 0;
}
Его выход
2 -> -1
3 -> 0
4 -> 1
9 -> 2
13 -> 3
17 -> 5
22 -> 6
25 -> -1
Ну, мин равно нулю. – YSC
Имя массива распадается на указатель в обычном режиме. Поэтому, когда вы думаете, что вы передаете массив по имени, вы действительно просто передаете 'int *'. Вы можете рекурсивно передавать модифицированный 'int *', просто добавляя к нему смещение. 'find (значение, folge + m, max-m)' – JSF
что такое 'wert'? – SergeyA