3 回答
TA贡献1796条经验 获得超4个赞
假设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,二者如果条件踢
更糟糕的是:如图所示,您的设置允许轻松地向下-向上-向下-向上-......永远
除此之外:缺少正确的“停止递归”。对于某些输入,您的代码将始终再次调用自身。
在这里猜测:您还缺少极端情况,例如 a < 0,但 b > 0
所以,长话短说:你的整个算法都是假的,你需要退后一步重新思考你在这里做什么!
TA贡献1856条经验 获得超11个赞
这不需要递归,但我假设您正在尝试学习递归。请参阅注释以获取解释。
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 );
}
TA贡献1803条经验 获得超3个赞
你不需要那些 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);
}
添加回答
举报