我遇到了二分法(递归实现)无法解决的问题。输入& 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;
}
我试图显示一些调试信息,但我无法弄明白。
答案 0 :(得分:0)
正如@Gene指出的那样,你永远不会使用递归调用的结果。此外,你要返回的只是a&amp; b之间的中点,你不需要递归来查找。 (相关?)
请注意,如果用于更改递归调用的a或b的2 if
都失败,那么您将使用&amp;的未更改值进行递归调用。 b ==&gt;无限递归,一种获得段错误的可靠方法。