我想使用递归方法找到被x
整除的数字总和
例如,如果n = 10,x = 3,则代码应返回3 + 6 + 9的总和
编写一个递归方法sumDivByX(n, x)
,它找到所有的和
从0
到n的可被x
整除的数字。
我问了我的老师,他告诉我:“首先,total应该是全局的。如果n或x == 0,则应该返回0。我只关心n是否可以被x整除。所以我只将n加到total(total + = n)if(n%x == 0)否则不执行任何操作。递归sumDivByX(n-1,x)并照常返回合计。”我试图纠正它。
public static int sumDivByX(int n, int x) {
int total = 0;
if (n == 0 || x == 0) {
return -1;
}
if (n % x >= 1) {
return total = 0;
} else if (n % x == 0) {
return total += n;
}
return total + sumDivByX(n - 1, x);
}
当我运行程序时,我得到
0
。 最佳答案
消除第二个和第三个if
语句内的返回
public static int sumDivByX(int n, int x) {
int total = 0;
if (n == 0 || x == 0) {
return 0;
}
if (n % x >= 1) {
total = 0;
} else if (n % x == 0) {
total += n;
}
return total + sumDivByX(n - 1, x);
}
对于更可爱的版本
public static int sumDivByX(int n, int x) {
if (n == 0 || x == 0) {
return 0;
}
return (n % x == 0 ? n : 0) + sumDivByX(n - 1, x);
}
注意-根据您打算使用的语义,您可能需要对
x<=0
(可能是错误?)和n==0
(基本情况)进行单独检查。