Java 我的代码会导致StackOverflower错误,即使在基本情况下也是如此

Java 我的代码会导致StackOverflower错误,即使在基本情况下也是如此,java,Java,我正在编写一个类,该类旨在递归地跟踪下限和上限,并通过在返回到上限值之后返回下限值来对两者之间的所有值求和。比如电话 System.out.PrintlSum2,5 应该返回23,因为这是2+3+4+5+4+3+2的和 下面是我针对这个问题的代码。即使是基本情况,由于第15行和第17行上的递归调用,我仍然得到一个StackOverflower错误 public static int sum(int lower, int upper) { int total = (upper - lowe

我正在编写一个类,该类旨在递归地跟踪下限和上限,并通过在返回到上限值之后返回下限值来对两者之间的所有值求和。比如电话

System.out.PrintlSum2,5

应该返回23,因为这是2+3+4+5+4+3+2的和

下面是我针对这个问题的代码。即使是基本情况,由于第15行和第17行上的递归调用,我仍然得到一个StackOverflower错误

public static int sum(int lower, int upper)
{
    int total = (upper - lower) + (upper - lower) + 1;
    return sum(lower, upper, total);
}

public static int sum(int lower, int upper, int total)
{
    if (lower < upper)
        return lower + sum(lower + 1, upper, total - 1);
    else if (lower == upper)
        return lower + sum(lower - 1, upper, total - 1);
    else if (total == 0)
        return 0;
    return 0;
}

public static void main(String[] args) 
{
    System.out.println(sum(2, 5));
}
有人能帮我找出堆栈溢出的原因,然后纠正它吗?

所以,下面是2,上面是5

这将调用下==4和上==5的总和。再说一遍

这将为您提供一个无限递归。一旦下限上升到上限,你就把它减少1,这样它就会不断地上下翻转1

你怎么修理它

如果必须通过递归来实现,可以简单地编写如下内容:

public static int sum(int lower, int upper) {
    // shouldn't happen, but in case you pass in weird arguments
    if (lower > upper) {
        return 0;
    }
    if (lower==upper) {
        return upper;
    }
    return 2*lower + sum(lower+1, upper);
}
所以对于sum2,5你得到


使用调试器找出发生了什么这是一个无限递归。。。。lower永远不会比upper大。如果下面的解决方案解决了您的问题,您可能希望接受该解决方案。OP可以通过添加一个标志来解决此问题,该标志指示它是否在上升。e、 g.sumint lower,int upper,int total,boolean Isasceding非常感谢您的回复。这真的帮了我很大的忙。不客气。这附近有一个接受回答按钮。
else if (lower == upper)
    return lower + sum(lower - 1, upper, total - 1);
public static int sum(int lower, int upper) {
    // shouldn't happen, but in case you pass in weird arguments
    if (lower > upper) {
        return 0;
    }
    if (lower==upper) {
        return upper;
    }
    return 2*lower + sum(lower+1, upper);
}
sum(2,5) = 2*2 + sum(3,5)
         = 2*2 + 3*3 + sum(4,5)
         = 2*2 + 2*3 + 2*4 + sum(5,5)
         = 2*2 + 2*3 + 2*4 + 5
         = 2 + 3 + 4 + 5 + 4 + 3 + 2