我试着用递归方法编写一个等分法的程序,但似乎不起作用。
函数是f(x)=ax^2+bx+c。
findroot中的参数:a b和c是f(x)中ab和c的值
p和q表示间隔(p,q)。假设输入是有效的(总是可以找到答案)。这是我的尝试

int sign(float a, float b,float c,float d)
{
   if (a*d*d + b*d + c > 0) {return 1;}
   if (a*d*d + b*d + c < 0) {return -1;}
   else {return 0;}
}

float find_root(float a, float b, float c, float p, float q)
{
   if (sign(a,b,c,(p+q)/2) == 0){return (p+q)/2;}

   else if (! sign(a,b,c,(p+q)/2) == sign(a,b,c,p))
   {return find_root(a,b,c,p,(p+q)/2);}

   else
   {return find_root(a,b,c,(p+q)/2,q);}
}

如有任何更正或建议,敬请谅解!

最佳答案

我觉得这条线是个问题:

else if (! sign(a,b,c,(p+q)/2) == sign(a,b,c,p))

也许你想用:
else if (! (sign(a,b,c,(p+q)/2) == sign(a,b,c,p)))


else if ( sign(a,b,c,(p+q)/2) != sign(a,b,c,p) )

关于c - 对分法与递归方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28350766/

10-11 22:59