2015-02-05 70 views
0

我试图用递归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);} 
} 

任何修正或建议表示赞赏!

+2

编辑自己的帖子的答复和删除quesiton不好。最好将你的帖子恢复到之前的状态,并发布你自己的答案。你甚至可以接受你自己的答案,但由@r – chux 2015-02-05 18:25:01

回答

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)) 
+0

提供的好答案非常感谢,这只是解决了问题 – Pheegy 2015-02-05 18:08:13