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

时间:2019-02-02 12:11:28

标签: 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)
            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));
    }
}

3 个答案:

答案 0 :(得分:0)

您返回索引。标记您的问题:

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

答案 1 :(得分:0)

对于空数组,它返回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;
}

或(在评论中由@Pshemo建议)

public int m(int[] nums, int index) {
    return index < nums.length ?
            (nums[index] == 11 ? 1 : 0) + m(nums, ++index) :
            0;
}

答案 2 :(得分:0)

这应该有效

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

   }

}