Страницы

Поиск по вопросам

пятница, 9 ноября 2018 г.

Является ли данный код рекурсивным?

Есть задание
Найти методом деления отрезка пополам минимум функции f(x) = 7sin(2x) на отрезке [2, 6] с заданной точностью ε (например, 0.01). Разумеется, его нужно написать
#include #include #include using namespace std;
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

Комментариев нет:

Отправить комментарий