还有两个int
a
和b
,也需要找到包括它们之间的所有数字中的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;
}
我该如何解决?
答案 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。
从头开始。导致无休止的递归。
因此,您当前的方法存在多个问题:
长话短说:您的整个算法都是虚假的,您需要退后一步,重新考虑您在这里所做的事情!
答案 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);
}