• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Задача: Рекурсивная функция определения корня

  • Автор темы Firiat
  • Дата начала
F

Firiat

Привет Всем !


Код:
	Определить рекурсивную функцию, которая находит корень уравнения f(x)=0 на заданном интервале [a,b] c заданной точностью e. Корень ищется методом деления отрезка пополам по сле-дующему алгоритму. Первоначально предполагается, что f(a)f(b)<0.
1)	вычисляются f(а), f(b);
2)	вычисляется c=(a+b)/2 и f(c);
3)	если f(a)f(c)>0, то а=c, в противном случае b=c;
4)	если b-a>e, то перейти к шагу 2, иначе любой из концов отрезка может быть использован в каче-стве корня уравнения.

Спс.
 
I

ierofant

Ребята как реализовать задачу?
Рекурсивно!

Я взял функцию x*x - 4, ты можешь другую подставить.

C++:
#include <iostream>

typedef double (*Func) (double);

double f1 (double _x)
{
return (_x * _x - 4);
}

void find (double &_a, double &_b, double e, Func _func)
{
double fa = (*_func)(_a);
double fb = (*_func)(_b);
double c = (_a + _b) / 2;
double fc = (*_func)(c);

if ((fa * fc) > 0) _a = c;
else _b = c;

if ((_b - _a) > e) find (_a, _b, e, _func);
}

int main ()
{
double a, b, e;
std::cout << "a: ", std::cin >> a;
std::cout << "b: ", std::cin >> b;
std::cout << "e: ", std::cin >> e;

find (a, b, e, &f1);

std::cout << b << std::endl;
return 0;
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!