为了账号安全,请及时绑定邮箱和手机立即绑定

使用 if 语句递归 Java

使用 if 语句递归 Java

小唯快跑啊 2021-09-12 15:49:41
有两个int a和b,也需要找到sum包含它们之间的所有数字。得到递归方法:有两条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 回答

?
慕的地8271018

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

所以,长话短说:你的整个算法都是假的,你需要退后一步重新思考你在这里做什么!


查看完整回答
反对 回复 2021-09-12
?
呼唤远方

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 );    

}


查看完整回答
反对 回复 2021-09-12
?
繁星点点滴滴

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);

}


查看完整回答
反对 回复 2021-09-12
  • 3 回答
  • 0 关注
  • 232 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信