Java 递增函数参数是更新“函数”的好方法吗;柜台;使用递归?

Java 递增函数参数是更新“函数”的好方法吗;柜台;使用递归?,java,recursion,counter,Java,Recursion,Counter,我正在练习递归,并一直在研究以下问题: “编写一个递归程序,其输入为数组a和数字x。该程序应打印a中x的出现次数” 这是我的工作解决方案: public int countOccurrencesOfX_Recursive(int[] array, int x, int index, int occurrences) { if (index == array.length) { return occurrences; } if (array[index] =

我正在练习递归,并一直在研究以下问题:

“编写一个递归程序,其输入为数组a和数字x。该程序应打印a中x的出现次数”

这是我的工作解决方案:

public int countOccurrencesOfX_Recursive(int[] array, int x, int index, int occurrences) {
    if (index == array.length) {
        return occurrences;
    }
    if (array[index] == x) {
        return countOccurrencesOfX_Recursive(array, x, index+1, occurrences+1);
    } else {
        return countOccurrencesOfX_Recursive(array, x, index+1, occurrences);
    }
}

如果不引入更多的函数参数,我想不出其他方法来实现它。这看起来不太好,因为它取决于引用参数设置为0,但是用户可以输入他们喜欢的任何整数。我的问题是,在使用递归时,这被认为是保持计数器的一种好方法吗?如果不是,那么你会怎么做?

解决这一问题的正常方法是使用一个非递归的公共函数,用户调用它,然后调用一个递归的私有函数

例如:

公共静态int递归计数(int[]数组,int值){
返回recursiveCountInternal(数组,值,0,0);
}
私有静态int recursiveCountInternal(int[]数组,int值,int索引,int计数){
if(index==array.length){
返回计数;
}
if(数组[索引]==值){
计数++;
}
返回recursiveCountInternal(数组、值、索引+1、计数);
}

我以前见过这种递归风格,看起来不错

您可以做的是创建一个重载函数,该函数只调用初始值为0的函数,如下所示:

public int countOccurrencesOfX_Recursive(int[] array, int x, int index) {
    return countOccurrencesOfX_Recursive(array, x, index, 0);
}

并使递归函数私有化。这将防止您担心用户输入任何数字。

您可以从字符串的其余部分返回1+个结果

private static int countOccurencesofIntInarrayRec(Integer[] nums, int target){
    if (nums == null || nums.length==0) return 0;
    int addNum = nums[0]==target?1:0;
    return  countOccurencesofIntInarrayRec(Arrays.copyOfRange(nums, 1, nums.length),target) + addNum;
}

这很好,只是将我的解决方案更改为与您刚才发布的完全相同的内容:)这是很好的建议。干杯。实际上,使用一个方法而不使用count变量作为参数之一是可能的。