将代码更改为递归

时间:2011-10-13 02:02:54

标签: algorithm recursion

任何人都可以帮我转换此代码以使其以递归方式运行吗? 我不确定如何。 代码的目标是计算数组中的数字量可被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;

2 个答案:

答案 0 :(得分:1)

诀窍是找到每个循环迭代的变化,并将其传递给递归方法:

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);
}

答案 1 :(得分:1)

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

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

返回:3