Hej Widzisz - zrobiłeś malutki błąd - w C++ indeksujesz tablice od zera, nie od jedynki jak w algorytmie. Stąd, gdy odwołujesz się do tablicy, to powinieneś odwoływać się do indeksu o jeden mniejszego.
#include <iostream>
int* t = nullptr;
int f(int p, int k, int e)
{
if (k == p)
{
if (t[p - 1] > e)
{
return p;
}
else
{
return p + 1;
}
}
else
{
int s = (p + k) / 2;
if (t[s - 1] > e)
{
return f(p, s, e);
}
else
{
return f(s+1, k, e);
}
}
}
int main()
{
int t1[5] = {3, 4, 6, 8, 9};
int t2[5] = {15, 16, 18, 22, 24};
int t3[5] = {2, 10, 16, 24, 26};
int t4[5] = {1, 3, 10, 10, 18};
t = t1;
std::cout << "F(1, 5, 10) dla t1 wynosi: " << f(1, 5, 10) << std::endl;
t = t2;
std::cout << "F(1, 5, 10) dla t2 wynosi: " << f(1, 5, 10) << std::endl;
t = t3;
std::cout << "F(1, 5, 10) dla t3 wynosi: " << f(1, 5, 10) << std::endl;
t = t4;
std::cout << "F(1, 5, 10) dla t4 wynosi: " << f(1, 5, 10) << std::endl;
return 0;
}
Wykonanie:
F(1, 5, 10) dla t1 wynosi: 6
F(1, 5, 10) dla t2 wynosi: 1
F(1, 5, 10) dla t3 wynosi: 3
F(1, 5, 10) dla t4 wynosi: 5
W razie dalszych pytań pisz.
Pozdrawiam, Patryk