我必须编写一个递归方法,该方法将计算所有偶数的总和,这些数字不能在7
的间隔中用1
除以参数。
我无法使用任何循环。这是我走了多远,但似乎我的陈述不正确。
有什么建议吗?
public static int specialSum (int x){
return (x % 2 == 0) && (x % 7 != 0) ? specialSum(x - 1) + 1 : 0;
}
public static void main(String[] args) {
System.out.println(specialSum(16));
}
答案 0 :(得分:1)
无论是否计算当前数字,都需要递归到下一个数字。
boolean divisibleBy2Not14 = ((x % 2 == 0) && (x % 7 != 0);
return (divisibleBy2Not14 ? x : 0) + (x > 0 ? specialSum(x - 1) : 0);
答案 1 :(得分:1)
如果您需要找到此类(x % 2 == 0 && x % 7 != 0
)阳性(x > 0
)数字的总和:
public static int specialSum (int x) {
return x > 0 ?
specialSum(x - 1) + (x % 2 == 0 && x % 7 != 0 ? x : 0) :
0;
}
答案 2 :(得分:1)
递归的逻辑有两个问题:
如果您想要总和,则应返回specialSum(x-1)+x
而不是specialSum(x-1)+1
。这是一个可行的例子:
public static int specialSum (int x){
if(x == 0) return 0; // ← degenerate case
return ((x % 2 == 0) && (x % 7 != 0) ? specialSum(x - 1) + x : specialSum(x - 1));
}
您可以通过将specialSum(x - 1) + x
替换为specialSum(x - 2) + x
来添加一些简单的简化,因为如果x - 1
是偶数,您就知道x
将是奇怪的。
答案 3 :(得分:1)
你必须改变像这样的特殊方法:
select 'by sales rep' breakdown
, salesRep
, '' year
, sum(price * amountShipped) amount
from etc
group by salesRep
union
select 'by sales rep and year' breakdown
, salesRep
, convert(char(4),orderDate, 120) year
, sum(price * amountShipped) amount
from etc
group by salesRep, convert(char(4),orderDate, 120)
etc
答案 4 :(得分:1)
接近它的一个好方法是首先将它写出来(没有三元运算符)。然后你可以看看它是否可以缩短:
public static int summer( int n ) {
if ( n < 2 ) {
return 0;
} else if ( (n % 2) == 0 ) {
if ( (n % 7) == 0 ) {
return summer( n - 2 ); // n-1 is odd, so skip it
}
return n + summer( n - 2 ); // n-1 is odd, so skip it
} else {
return summer( n - 1 );
}
}