将代码改为递归



谁能帮我转换这段代码,使其递归运行?我不太确定是怎么做到的。这段代码的目的是计算数组中能被k整除的数的个数。

int[] a = {1,2,3,4,5,6,9}
int k = 3;
int count;
for (int i = 0;i <a.length; i ++){
    if (a[i] % 3 == 0){
        count ++;
    }
}
return count;

诀窍是找出每次循环迭代时发生的变化,并将其传递给递归方法:

int count(int[] array, int k, int i){
    if(i>=array.length)
        return 0;
    boolean divisible = array[i] % k == 0;
    return count(array, k, i+1) + (divisible?1:0);
}

无需使用递归。您可以简单地检查列表中的每个成员是否能被3整除。然后统计True的个数。在Mathematica中,这很简单。

a = {1, 2, 3, 4, 5, 6, 9};
Count[Divisible[#, 3] & /@ a, True]

返回:3

最新更新