猿问

使用 if 语句递归 Java

有两个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;

}

我该如何解决?


小唯快跑啊
浏览 233回答 3
3回答

慕的地8271018

假设a是1,b是2。if&nbsp;(a&nbsp;<=&nbsp;0&nbsp;&&&nbsp;b&nbsp;<=&nbsp;0)&nbsp;&nbsp;result&nbsp;=&nbsp;getSum(a&nbsp;+&nbsp;1,&nbsp;b&nbsp;+&nbsp;1)&nbsp;+&nbsp;a&nbsp;+&nbsp;b; if&nbsp;(a&nbsp;>=&nbsp;0&nbsp;&&&nbsp;b&nbsp;>=&nbsp;0)&nbsp;&nbsp;result&nbsp;=&nbsp;getSum(a&nbsp;-&nbsp;1,&nbsp;b&nbsp;-&nbsp;1)&nbsp;+&nbsp;a&nbsp;+&nbsp;b;第二个开始:result&nbsp;=&nbsp;getSum(1&nbsp;-&nbsp;1,&nbsp;2&nbsp;-&nbsp;1)&nbsp;+&nbsp;a&nbsp;+&nbsp;b;所以你调用: a = 0, b = 2. 那一个选择:result&nbsp;=&nbsp;getSum(0&nbsp;+&nbsp;1,&nbsp;1&nbsp;+&nbsp;1)&nbsp;+&nbsp;a&nbsp;+&nbsp;b;所以你回来用 1, 2 调用。它从头开始。导致无限递归。因此,您当前的方法存在多个问题:如果条件可能适用,两者都适用。当您使用“<=”和“> =”,当a或b是0,二者如果条件踢更糟糕的是:如图所示,您的设置允许轻松地向下-向上-向下-向上-......永远除此之外:缺少正确的“停止递归”。对于某些输入,您的代码将始终再次调用自身。在这里猜测:您还缺少极端情况,例如 a < 0,但 b > 0所以,长话短说:你的整个算法都是假的,你需要退后一步重新思考你在这里做什么!

呼唤远方

这不需要递归,但我假设您正在尝试学习递归。请参阅注释以获取解释。public static int getSum( int a, int b ) {&nbsp;&nbsp;if ( a == b ) { // if both are equal there are no numbers in between - so sum is number itself.&nbsp; &nbsp; &nbsp;return a;&nbsp;}&nbsp;// if a < b then increment a to reach b otherwise increment b to reach a.&nbsp;// this works even if a or b or both are negative.&nbsp;// So when you increment a, add 'a' only to current sum and then move forward&nbsp;// When you increment b, add 'b' only to current sum and then move forward.&nbsp;return a < b ?&nbsp; a + getSum( a + 1, b ) :&nbsp; b + getSum( a, b + 1 );&nbsp; &nbsp;&nbsp;}

繁星点点滴滴

你不需要那些 if 语句。只需按照以下步骤操作:public static int getSum(int a, int b){&nbsp; &nbsp; if (b < a) return 0;&nbsp; &nbsp; if (b == a) return b;&nbsp; &nbsp; return a + getSum(a + 1, b);}
随时随地看视频慕课网APP

相关分类

Java
我要回答