Java if语句的递归

时间:2018-09-10 13:47:03

标签: java recursion

还有两个int ab,也需要找到包括它们之间的所有数字中的sum

Got递归方法: 与两个if语句一起使用,如果仅使用一个if语句代码可以正常工作, 否则落入StackOverflowError

public static int getSum(int a, int b) {
    int result = 0;

    if (a <= 0 && b <= 0)  result = getSum(a + 1, b + 1) + a + b;

    if (a >= 0 && b >= 0)  result = getSum(a - 1, b - 1) + a + b;

    return  result;
}

我该如何解决?

3 个答案:

答案 0 :(得分:3)

让我们假设a为1,b为2。

if (a <= 0 && b <= 0)  result = getSum(a + 1, b + 1) + a + b;
if (a >= 0 && b >= 0)  result = getSum(a - 1, b - 1) + a + b;

第二个踢进来:

result = getSum(1 - 1, 2 - 1) + a + b;

所以您打电话给:a = 0,b =2。那个选择:

result = getSum(0 + 1, 1 + 1) + a + b;

因此您将回叫1、2。

从头开始。导致无休止的递归。

因此,您当前的方法存在多个问题:

  • 两者(如果可能)。当您使用“ <=”和“> =”时,当a或b为0时,如果条件出现,则同时两者
  • 更糟:如图所示,您的设置可让您轻松地永久地上下颠倒……永远
  • 除此之外:缺少正确的“停止递归”。对于某些输入,您的代码将总是总是再次调用自身。
  • 在这里猜测:您还缺少一些极端情况,例如<0,但b> 0

长话短说:您的整个算法都是虚假的,您需要退后一步,重新考虑您在这里所做的事情!

答案 1 :(得分:2)

这不需要递归,但是我认为您正在尝试学习递归。 请查看注释以获取解释。

public static int getSum( int a, int b ) { 
 if ( a == b ) { // if both are equal there are no numbers in between - so sum is number itself.
     return a;
 }
 // if a < b then increment a to reach b otherwise increment b to reach a.
 // this works even if a or b or both are negative.
 // So when you increment a, add 'a' only to current sum and then move forward
 // When you increment b, add 'b' only to current sum and then move forward.
 return a < b ?  a + getSum( a + 1, b ) :  b + getSum( a, b + 1 );    
}

答案 2 :(得分:1)

您不需要那些if语句。只需执行以下操作:

public static int getSum(int a, int b){

    if (b < a) return 0;
    if (b == a) return b;
    return a + getSum(a + 1, b);
}