当前位置: 首页 > 知识库问答 >
问题:

JAVA递归二分法

卜飞鸣
2023-03-14

    private double EPSILON = 0.25;
    private int iteration = 0;

    public double f(double x){
        return x*x - 2;
    }

    public double bisection(double a, double b){ //main algorithm

        iteration++;

        if(f(a) * f(b) >= 0){
            return 0.0; // Wrong [a, b]
        }

        double c = a;
        while((b-a) >= EPSILON){

            c = (a+b)/2; // middle point

            if(f(c) == 0.0){ // that means middle point is the root
                break;
            }
            else if (f(c)*f(a) < 0){
                b = c;
                bisection(a, b); // continue calculating by recu
            }
            else{
                a = c;
                bisection(a, b);
            }
        }
        return c;
    }

    public int getIteration(){
        return iteration;
    }
}

我正在处理一个递归二分法/算法。我已经把我的递归放在else/else if语句中,不知道我是否错了。它也返回正确的根,而没有递归,但主要问题是用递归。

共有1个答案

吕树
2023-03-14

好吧,我找到出路了。

    private double EPSILON = 0.25;
    private int iteration = 0;
    private double c = 1.0;

    public double f(double x){
        return x*x - 2;
    }

    public double bisection(double a, double b){ //main algorithm

        iteration++;

        if(f(a) * f(b) >= 0){
            return 0.0; // Wrong [a, b]
        }

        if((b-a) >= EPSILON){

            c = (a+b)/2; // middle point

            if(f(c) == 0.0){ // that means middle point is the root
                return c;
            }
            else if (f(c)*f(a) < 0){
                b = c;
                bisection(a, b);
            }
            else {
                a = c;
                bisection(a, b);
            }
        }
        return c;
    }

    public int getIteration(){
        return iteration;
    }
}
 类似资料:
  • null 请记住,我是一个非常早期,初学者,婴儿程序员和DIY课,我正在学习的糟糕的解释东西。所以请简单明了。谢谢你。

  • 本文向大家介绍C++ 中二分查找递归非递归实现并分析,包括了C++ 中二分查找递归非递归实现并分析的使用技巧和注意事项,需要的朋友参考一下 C++ 中二分查找递归非递归实现并分析 二分查找在有序数列的查找过程中算法复杂度低,并且效率很高。因此较为受我们追捧。其实二分查找算法,是一个很经典的算法。但是呢,又容易写错。因为总是考虑不全边界问题。 用非递归简单分析一下,在编写过程中,如果编写的是以下的代

  • 我有以下Banach分形问题:所谓的Banach曲线可以使用以下分形规则生成: 画一个圆 画9个较小的圆,每个圆都有一个半径⅓ 原始圆的。其中一个较小的圆应具有与原始圆相同的圆心。其余8个较小圆的中心应沿原始圆的圆周等距分布 对每个较小的圆重复步骤b 注意:以点(x, y)为中心的半径r圆是所有点(x r·cos(t),y r·sin(t))的集合,其中0≤t≤2π,t以弧度给出。我可以使用指南:

  • 本文向大家介绍用非递归方法实现二分查找相关面试题,主要包含被问及用非递归方法实现二分查找时的应答技巧和注意事项,需要的朋友参考一下 --代码如下,二分查找只适用于有序数列,对其进行查找,效率非常高,不适用于无序数列  

  • 程序调用自身的编程技巧称为递归(recursion),它做为一种算法在程序设计语言中广泛应用。 Java 支持递归,在 Java 编程中,递归是允许方法调用自身调用的属性。调用自身的方法称为是递归的。 递归的典型例子是数字的阶乘。数字 N 的阶乘是 1 到 N 之间所有整数的乘积。例如 3 的阶乘就是 1×2×3。下面的程序使用递归来计算数字的阶乘。 该程序产生的输出如下所示: 3的阶乘是 6 4

  • 主要内容:递归实现,非递归实现二叉树后序遍历的实现思想是:从根节点出发,依次遍历各节点的左右子树,直到当前节点左右子树遍历完成后,才访问该节点元素。 图 1 二叉树   如图 1 中,对此二叉树进行后序遍历的操作过程为: 从根节点 1 开始,遍历该节点的左子树(以节点 2 为根节点); 遍历节点 2 的左子树(以节点 4 为根节点); 由于节点 4 既没有左子树,也没有右子树,此时访问该节点中的元素 4,并回退到节点 2 ,遍