Java 为什么此函数总是返回0或1

Java 为什么此函数总是返回0或1,java,recursion,return,Java,Recursion,Return,我试图学习一些关于递归的知识,所以我试着做一些练习,但现在我有点结巴,因为我不明白为什么这个函数总是返回1或0 我正在尝试计算int数组中11的出现次数 public class Uloha06 { public static int count = 0; public static int array11(int[] nums, int index){ if(index<nums.length){ if(nums[index]==11) c

我试图学习一些关于递归的知识,所以我试着做一些练习,但现在我有点结巴,因为我不明白为什么这个函数总是返回1或0 我正在尝试计算int数组中11的出现次数

public class Uloha06 {
public static int count = 0;
public static int array11(int[] nums, int index){
    if(index<nums.length){
        if(nums[index]==11)
            count+=1;
        index++;
        array11(nums,index);
        if(index<nums.length)
            return index;
    } 
    return count;
}
public static void main(String[] args) {

    int array11[]={11,1,2,36,11};
    System.out.println(array11(array11, 0));
    }
}
公共类Uloha06{
公共静态整数计数=0;
公共静态int数组11(int[]nums,int索引){

如果(index返回索引。标记您的问题:

public class Uloha06 {
    public static int count = 0;
    public static int array11(int[] nums, int index){
        if(index<nums.length){
             if(nums[index]==11)
                 count+=1;
             index++;
             array11(nums,index);
             /// booom here index is 1 but you want count
             //if(index<nums.length)
             //    return index;
         } 
         return count;
     }
     public static void main(String[] args) {
        // TODO Auto-generated method stub
        int array11[]={11,1,2,36,11};
        System.out.println(array11(array11, 0));
     }
公共类Uloha06{
公共静态整数计数=0;
公共静态int数组11(int[]nums,int索引){

if(index对于空数组,它返回
0
,对于非空数组,它返回
1
。您看到的结果来自
index
,而不是您预期的
count

我会在不涉及字段的情况下编写它

public int m(int[] nums, int index, int count) {
    return index < nums.length ?
            m(nums, index + 1, nums[index] == 11 ? ++count : count) :
            count;
}
public int m(int[]nums,int索引,int计数){
返回索引
或(由@Pshemo在评论中建议)

public int m(int[]nums,int索引){
返回索引
这应该行得通

public static int array11(int[] nums, int index){

if(index < 0){
    return 0;}

 else if (nums [index] == 11)
 { 
        return (array11(nums, index-1) + 1);

 }
   else {
      return  array11(nums, index-1);

   }

} 
公共静态int数组11(int[]nums,int索引){
如果(指数<0){
返回0;}
else if(nums[索引]==11)
{ 
返回(数组11(nums,索引-1)+1);
}
否则{
返回数组11(nums,索引-1);
}
} 

递归调用的结果似乎没有做任何处理
array11(nums,index);
-如果返回的计数为1,会发生什么?您应该将其添加到count变量中?Java使用pass by value,因此
计数最多更新一次。如果(index@Pshemo哇,你刚刚解决了我的问题,返回count就足够了。我现在应该返回index:D,这看起来非常清楚。当我看到它时,我觉得自己真的很笨:D thx manBTW你应该避免在递归中使用字段(比如
counter
)。例如,您可以使用与编写递归和相同的技术,它可能类似于
返回currentElement+recursiceSumOfPreviousElements
。在这里,您的
currentElement
将是1或0,这取决于当前索引的值是否为11。因此,您的递归可以类似于
公共静态intt11(int[]nums,int index){if(index
public static int array11(int[] nums, int index){

if(index < 0){
    return 0;}

 else if (nums [index] == 11)
 { 
        return (array11(nums, index-1) + 1);

 }
   else {
      return  array11(nums, index-1);

   }

}