Java 如何避免这种递归函数调用?

Java 如何避免这种递归函数调用?,java,function,recursion,compiler-errors,Java,Function,Recursion,Compiler Errors,所以getArea调用getHeight,getHeight调用getArea并创建一个永无止境的循环。 我被评为写尽可能少的代码和重用尽可能多的函数 不管怎样,我是否可以通过函数调用来实现这一点,而不是仅仅用forumula替换getArea到getHeight中调用getArea //returns the area of a trapezoid public double getArea(){ double height = getHeight(); double area

所以getArea调用getHeight,getHeight调用getArea并创建一个永无止境的循环。 我被评为写尽可能少的代码和重用尽可能多的函数

不管怎样,我是否可以通过函数调用来实现这一点,而不是仅仅用forumula替换getArea到getHeight中调用getArea

//returns the area of a trapezoid
public double getArea(){
    double height = getHeight();
    double area = (.5 * ((getPoint(3).getX() - getPoint(4).getX()) + (getPoint(2).getX() - getPoint(1).getX()))) * height;
    return area;
}

//returns the height of a trapezoid
public double getHeight(){
    double area = getArea();
    double height = (2 * area) / (((getPoint(3).getX() - getPoint(4).getX()) + (getPoint(2).getX() - getPoint(1).getX())));
    return height;
}
供审查:

  • 圆形

    void a() {
        b();
    }
    void b() {
        a();
    }
    
  • 递归的

    bool binarySearch(int* list, int searchFor, int size) {     
        if (size == 1 && list[0] != searchFor)
            return false;
    
        int split = size / 2;
    
        if (list[split] == searchFor) {
            return true;
        } else if (list[split] > searchFor) {
            binarySearch(list, searchFor, split);
        } else {
            binarySearch(list[split], searchFor, split);
        }
    
  • 递归无限/非终止

    void a() {
        a();
    }
    

  • 关于“答案”:

    所以我需要更多的信息来给你最简单的答案,但这里至少有一个选择;依赖于你有x和y坐标(其他任何人都可以随意添加)

    使用点查找高度:

    您似乎可以调用.x()来获取x值,因此如果存在y值,只需通过获取每个点对(A&D、D&C、C&B和B&A)的差值来计算高度

    对于其中的每一个,都有一个向量m
    (m.x,m.y)=(a.x,a.y)-(b.x,b.y)
    ,可以找到
    magnity=sqrt(m.x*m.x+m.y*m.y)

    现在你有了所有四条边的长度,你可以这样计算高度(a&b是顶部和底部,c&d是侧面):

    让其中一个函数以高度/面积作为输入,或者只使用sin/cos内置函数进行一些基本触发(因为您知道底部和顶部高度),我必须使用提供的函数头,它们是public double getHeight()和public double getArea(),因此我不能让一个函数将另一个函数作为参数。我愿意将公式替换到函数中,以避免递归,但即使这样,我仍然不知所措,因为每个函数都依赖于另一个函数。有什么帮助吗?我相信你把递归原理和从一个方法中调用另一个方法混淆了吧?如果无法获取额外的参数,请使用trig。我马上给你写一个完整的答案。请这样做,我完全不知所措。我认为这是一个递归问题的原因是:当函数调用自身时,线程“main”java.lang.StackOverflowerError中的异常是递归?这不适用于两个函数无限地互相调用吗?哎呀。仍然是编程语法的新手。Y值只有在点中有公共Y时才起作用。如果将梯形旋转为不平行于轴,则该操作将不起作用。这里似乎有很多未解之谜。分数是在给定的保证顺序中,还是你必须弄清楚它们是什么?至少你需要计算出我认为的点之间的线的长度