#include <stdio.h>
#include <math.h>
int Didai(g,x,eps,N)
   double (*g)();
   double *x,eps;
   int N;
{
   int i=0;
   double x1,x2=*x;
   x1=x2-(x2*x2*x2-3*x2*x2-x2+9)/(3*x2*x2-6*x2-1);
   while (1)
   {
      *x=g(x1,x2);
      if (fabs((*x)*(*x)*(*x)-3*(*x)*(*x)-(*x)+9)<eps) return 1;
      if (++i>=N) return 0;
      x2=x1;
      x1=*x;
   }
}
 
double f1(double x1,double x2)
{
 return(x1-(x1*x1*x1-3*x1*x1-x1+9)*(x1-x2)/((x1*x1*x1-3*x1*x1-x1+9)-(x2*x2*x2-3*x2*x2-x2+9)));
}
 
main()
{
   double x=-1.5;
   if(Didai(f1,&x,1e-5,1000))
      printf("root4=%f\n",x);
}