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

问题描述 投票:1回答:3

我想了解一些有关递归所以我试着做一些练习,但现在我有点stucked因为我想不通,为什么这个函数总是返回我1或0我试着去数数在int数组的11 appearences。

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));
    }
}
java recursion return
3个回答
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;
}

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

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

   }

} 
© www.soinside.com 2019 - 2024. All rights reserved.