Рекурсивная функция 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; }
Объяснение кода листинга программы
- Включаем стандартную библиотеку для работы сprintf.
- Определяем функцию f1(x) = x*x - 2.
- Определяем функцию root(f, a, b, eps), которая рекурсивно находит корень уравнения методом деления пополам.
- В функции root(f, a, b, eps) сначала находим средний промежуток [a, c] и вычисляем значение функции f(c).
- Если разница между a и b меньше заданной точности eps, то возвращаем значение c.
- Если f(c) > 0, то рекурсивно вызываем root(f, c, b, eps).
- Если f(c) < 0, то рекурсивно вызываем root(f, a, c, eps).
- В функции main() вычисляем корень уравнения f1(x) = x*x - 2 с помощью функции root(f1, 0, 5, 0.000001) и выводим результат на экран.
- Возвращаем 0, чтобы операционная система завершила работу с программой.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д