我试着用递归的apporach编写一个二分法的程序,但似乎没有用。
函数是f(x)= ax ^ 2 + bx + c。 findroot中的参数:a b和c是f(x)中b和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);}
}
感谢任何更正或建议!
答案 0 :(得分:2)
我觉得这一行是问题所在:
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) )