日期:2014-05-20  浏览次数:20737 次

递归调用 函数调用次数问题!!



package 实验一;

import java.util.Scanner;


public class Test1 {

static double EPS;
static int I=1;    //二分次数

public static double f(double x) {
return x * x * x + x * x - 3 * x - 3;
}

public static double bisection(double a, double b) {
//System.out.println(I);

double fab = f(a) * f(b);
if (fab >= 0) {
System.out.println("该区间无根!");
return 0;
} else {

double c = (a + b) / 2;

if (f(a) * f(c) < 0) {
if (c - a < EPS) {
return c;
} else {
I=I+1;
return bisection(a, c);
}
} else {
if (b - c < EPS) {
return c;
} else {
I=I+1;;
return bisection(c, b);
}
}
}
}

public static void main(String[] args) {
//System.out.println(bisection(1,2));
System.out.print("请输入单根区间[a,b]中a点的值:");
double a=KB.scanDouble();
System.out.print("\n请输入单根区间[a,b]中b点的值:");
double b=KB.scanDouble();
System.out.print("\n请输入根的容许误差限EPS的值:\n");
EPS=KB.scanDouble();
System.out.println("二分次数为:"+I);
System.out.println("所得到的根为:"+bisection(a,b));
}

}




class KB { 

  public static double scanDouble(){   //接收数值输入 
  Scanner in=new Scanner(System.in); 
      return in.nextDouble();
  } 
}




这是二分法求根的小程序!I表示调用次数,EPS表示误差允许值!!得到的结果永远是1,错的!求大家帮我看看哪里错了!!


运行结果如下:


请输入单根区间[a,b]中a点的值:1

请输入单根区间[a,b]中b点的值:2

请输入)根的容许误差限EPS的值:
5e-6
二分次数为:1
所得到的根为:1.7320518493652344
Java 递归

------解决方案--------------------
要把基本运算是什么搞清楚。。楼主你回头看看自己这么放的话基本运算成啥了