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

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

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

Код к задаче: «Рекурсивная функция root: нахождение корня уравнения методом деления отрезка пополам - C (СИ)»

textual
#include<stdio.h>
#include<math.h>
double roof(double (*f)(double x),double a,double b,double eps);
double sinx(double x)
{
    return sin(x)-0.5;
}
int main(void)
{
    double a=0.0,b=3.0,eps;
    printf("Enter eps: ");
    scanf("%lf",&eps);
    printf("x=%lf\n",roof(sinx,a,b,eps));
    return 0;
}
double roof(double (*f)(double x),double a,double b,double eps)
{
    double c=(a+b)/2;
    if(fabs(b-a)<eps)
    return c;
    if(f(a)*f(c)<0)
    return roof(f,a,c,eps);
    return roof(f,c,b,eps);
    
}

9   голосов, оценка 4.111 из 5


СОХРАНИТЬ ССЫЛКУ