Есть задание
Найти методом деления отрезка пополам минимум функции f(x) = 7sin(2x) на отрезке [2, 6] с заданной точностью ε (например, 0.01).
Разумеется, его нужно написать
#include
const double eps = 0.01;
double a, b, t, x, y, t1, s;
double func(double a, double b)
{
s = (a + b) / 2;
y = (7 * sin(2)*s);
return y;
}
int main()
{
a = 2;
b = 6;
while (abs(b - a) < eps);
{
t = (a + b) / 2.0;
y = 7 * sin(2)*(t - eps);
x = 7 * sin(2)*(t + eps);
if (y <= x)
{
a = t;
t1 = func(a, b);
}
else
{
b = t;
t1 = func(a, b);
}
}
cout << "Otvet: " << t1;
return 0;
}
Проблема в том, что преподаватель говорит, что задача решена не рекурсивно. Я утверждаю что решение рекурсивно, так как функция double func принимает значение из функции int main. Прав ли я?
Ответ
Верно будет так (примерны код):
rec(double a, double b){
(здесь все ваши действия с синусами)
if (abs(b - a) < eps) // проверяем новые значения - надо еще раз пересчитать?
rec(a, b) // вызываем саму себя с новыми значениями
else return ... // иначе - возвращаем ответ
}
И в мейне вызываем эту функцию,не забыв передать в нее начальные a и b
Комментариев нет:
Отправить комментарий