Почему эта функция всегда возвращает 0 или 1 - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь что-то узнать о рекурсии, поэтому я пытаюсь выполнить некоторые упражнения, но сейчас я застрял, потому что не могу понять, почему эта функция всегда возвращает мне 1 или 0, я пытаюсьсчитать количество появлений 11 в массиве int.

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 голосов
/ 02 февраля 2019

Возвращает 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 голосов
/ 02 февраля 2019

это должно работать

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

   }

} 
0 голосов
/ 02 февраля 2019

Вы возвращаете индекс.Пометил вашу проблему:

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));
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...