我想使用递归方法找到被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(基本情况)进行单独检查。

09-26 19:54