我必须找到使用递归不能被7整除的所有偶数的总和。我尝试了这段代码,但似乎我在某处犯了错误,因为它返回0:
public static void main(String[] args) {
System.out.println(specialSum(50));
}
public static int specialSum(int a) {
if ((a >= 1) && ((specialSum(a-1))%7 !=0)) {
return a + specialSum(a -1);
} else{
return 0;
}
}
}
答案 0 :(得分:1)
而不是if ((a >= 1) && ((specialSum(a-1))%7 !=0))
尝试if ((a >= 1) && (a%7) !=0))
,就像现在一样,您永远不会检查原始a
值是否不能被7整除,您的第一次检查始终是{ {1}} - 1。
答案 1 :(得分:1)
在递归中,你只需要关注当前步骤,你不应该在条件中使用specialSum(a -1)。这是下一步,你应该只关注当前步骤后调用它。
您应该只应用两个规则来成功:仅将当前数字添加到nexts - 如果他们是平均的话 - 如果它们不能被7整除。
public static int specialSum(int a) {
if(a <= 1) // Final Case.
{
System.out.print(" 0 = ");
return 0;
}
if(a%2 != 0) // Even Number, do not sum, call next step
{
return specialSum(a-1);
}
else
{
if(a % 7 == 0){ // Divisible by 7 Do not sum, call next step.
return specialSum(a-1);
}
else // NOT divisible by 7 nor by 2, add it to the next step
{
System.out.print(a+ " + ");
return a + specialSum(a-1);
}
}
}
输出: 50 + 48 + 46 + 44 + 40 + 38 + 36 + 34 + 32 + 30 + 26 + 24 + 22 + 20 + 18 + 16 + 12 + 10 + 8 + 6 + 4 + 2 + 0 = 566
答案 2 :(得分:0)
你的代码错了。
代码中的条件(specialSum(a-1))%7 !=0)
会在49
时调用a=50
的方法。这会调用48
的方法,该方法会调用47
,依此类推a=1
。然后,它需要0
,不大于或等于 1
,因此它返回0
。现在,任何数字0%n
为0
。因此,您将0
作为输出。
将您的方法更改为以下内容:
public static int specialSum(int a) {
if(a<=2) return 2; // base case
else if(a%7==0) return specialSum(a-2); // if it is divisible by 7, then do not add it, and call the method for a-2.
else return a+specialSum(a-2); // else add the number, and get the answer for a-2.
}
答案 3 :(得分:0)
这对我有用。第一个if
确保只取偶数。然后第二个if
确保只有总和,如果不能被7整除。最后if
对结果求和。
public static void main(String[] args) {
System.out.println(specialSum(50, 0));
}
public static int specialSum(int max, int current){
if(max % 2 == 1)
max -= 1;
if(max % 7 != 0)
current += max;
if(max >= 1){
max -= 2;
return specialSum(max, current);
}
return current;
}
返回566。 等于:50 + 48 + 46 + 44 + 40 + 38 + 36 + 34 + 32 + 30 + 26 + 24 + 22 + 20 + 18 + 16 + 12 + 10 + 8 + 6 + 4 + 2.
答案 4 :(得分:0)
public static int specialSum(int a) {
if ( a % 7 !=0 && a%2==0 ) {
return a + specialSum(a - 2);
} else {
if (a > 2 ) {
a=a-2;
return a + specialSum(a - 2);
} else {
return 0;
}
}
}
答案 5 :(得分:0)
在这里你有一行解决方案,你应该有一个案例来停止递归,在你的情况下你停止递归在49,因为它可以被7整除,你不会考虑到数字少超过49
main()
{
specialSum(50, 7);
}
public static int specialSum(int a, int toDivide)
{
return (a == 0) ? 0 : (a >= 1 && a%2 == 0 && a%7 != 0) ? a + specialSum(a - 1, toDivide) : specialSum(a - 1, toDivide);
}
答案 6 :(得分:0)
您需要检查a是否可以被7整除,因此您应该使用if ((a>=1) && (a%7) !=0))
来确保检查基本条件。