Рекурсивная функция root(f, a, b, eps): нахождение корня уравнения методом деления пополам - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Описать рекурсивную функцию root(f, a, b, eps), которая методом деления отрезка пополам находит с точностью eps>0 корень уравнения f(x)=0 на отрезке [a,b]. Нужно три функции. Первая - ввод значений, вторая - подсчет весь, третья - вывод значений.

Решение задачи: «Рекурсивная функция root(f, a, b, eps): нахождение корня уравнения методом деления пополам»

textual
Листинг программы
#include  <stdio.h>
 
double f1(double x) { return x*x - 2; }
    
double root(double (*f)(double), double a, double b, double eps) {
    double c = (a+b)/2;
    return b-a<eps ? c : f(a)*f(c)>0 ? root(f,c,b,eps) : root(f,a,c,eps);
}
int main(void) {
    printf("root = %f\n", root(f1, 0, 5, 0.000001));
    return 0;
}

Объяснение кода листинга программы

  1. Включаем стандартную библиотеку для работы сprintf.
  2. Определяем функцию f1(x) = x*x - 2.
  3. Определяем функцию root(f, a, b, eps), которая рекурсивно находит корень уравнения методом деления пополам.
  4. В функции root(f, a, b, eps) сначала находим средний промежуток [a, c] и вычисляем значение функции f(c).
  5. Если разница между a и b меньше заданной точности eps, то возвращаем значение c.
  6. Если f(c) > 0, то рекурсивно вызываем root(f, c, b, eps).
  7. Если f(c) < 0, то рекурсивно вызываем root(f, a, c, eps).
  8. В функции main() вычисляем корень уравнения f1(x) = x*x - 2 с помощью функции root(f1, 0, 5, 0.000001) и выводим результат на экран.
  9. Возвращаем 0, чтобы операционная система завершила работу с программой.

Оцени полезность:

14   голосов , оценка 3.929 из 5
Похожие ответы