C 递归二分法程序停止工作

C 递归二分法程序停止工作,c,recursion,methods,bisection,C,Recursion,Methods,Bisection,我对二分法(递归实现)有一个不起作用的问题。程序在输入a&b值后崩溃 #include <stdio.h> #include <stdlib.h> #include <iostream> #define e 0.0001 #define dbg 1 using namespace std; double f(double x){ return x*x*x-x-2; } double bisection(double a,double b){ d

我对二分法(递归实现)有一个不起作用的问题。程序在输入a&b值后崩溃

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#define e 0.0001
#define dbg 1
using namespace std;
double f(double x){
    return x*x*x-x-2;
}
double bisection(double a,double b){
    double x1;
    x1=(b+a)/2;
    if(x1>e){
        if(f(b)*f(x1)<0)
        {
            a=x1;
        }
        else
        if(f(a)*f(x1)<0)
            b=x1;
        bisection(a,b);
        }
    return x1;
}
int main () {
    int a,b;
    double root;
    printf("a=");
    scanf("%d",&a);
    printf("b=");
    scanf("%d",&b);
    if(f(a)*f(b)<0){
        root=bisection(a,b);
        printf("root %g",root);
    }

    system("pause");
    return 0;
}
#包括
#包括
#包括
#定义e 0.0001
#定义DBG1
使用名称空间std;
双f(双x){
返回x*x*x-x-2;
}
双二等分(双a,双b){
双x1;
x1=(b+a)/2;
如果(x1>e){

如果(f(b)*f(x1)正如@Gene所指出的,那么您永远不会使用递归调用的结果。此外,您所返回的只是a和b之间的中点,您不需要递归来找到它。(相关?)


请注意,如果用于为递归调用更改a或b的2
if
s都失败,那么您可以使用a&b==>infinite recursion的值进行递归调用,这是获得segfault的可靠方法。

这是做什么的?返回x*x*x-x-2;返回函数(x^3-x-2)您的问题是什么这不是问题的关键。有两个地方需要仔细观察和思考:1)
x1>e
。这不是你想要的。2)
二等分(A,b);
你永远不会使用返回值!它应该是什么样子,我知道我需要一个ε来比较。