2016-03-29 2 views
0

Мне нужно получить количество чисел меньше первого целого в массиве с использованием рекурсии. Мне дано определение функции какПолучить счетчик из массива с использованием рекурсии

public static int countGreaterThanFirst(int[] 
numbers, int startIndex, int endIndex, int firstNumber){} 

Я не должен использовать петлю или глобальную/статическую переменную. Как я могу преобразовать свою реализацию ниже, чтобы удовлетворить двум вышеуказанным условиям. Недавно я спросил another, но это немного отличается из-за необходимости отслеживать переменную count. Если кто-то может помочь, я буду очень благодарен. Ниже приведена моя реализация с помощью цикла.

public static int countGreaterThanFirst(int[] numbers, int startIndex, int endIndex, int firstNumber) { 
    int greater_than_first = 0; 
    for (int count = startIndex; count <= endIndex; count++) { 
     if (numbers[count] > firstNumber) { 
      greater_than_first++; 
     } 
    } 
    return greater_than_first; 
} 
+0

Это работает, но это не ожидаемая реализация. –

ответ

3

Возможно, вам это не нужно много параметров:

public static int countGreaterThanFirst(int[] numbers, int currentIndex) { 
    if (currentIndex == numbers.length) return 0; 
    else { 
     if (numbers[currentIndex] > numbers[0]) { 
      return 1 + countGreaterThanFirst(numbers, currentIndex + 1); 
     } else { 
      return countGreaterThanFirst(numbers, currentIndex + 1); 
     } 
    } 
} 

и вы должны вызывать его (например):

countGreaterThanFirst(someArray, 1); 

Если вы имели в виду, чтобы найти «все числа между numbers[startIndex] и numbers[endIndex], которые больше firstNumber, затем должно быть очень похоже на приведенное выше:

public static int countGreaterThanFirst(int[] numbers, int startIndex, int endIndex, int firstNumber) { 
    if (startIndex > endIndex) return 0; 
    else { 
     if (numbers[startIndex] > firstNumber) { 
      return 1 + countGreaterThanFirst(numbers, startIndex + 1, endIndex, firstNumber); 
     } else { 
      return countGreaterThanFirst(numbers, startIndex + 1, endIndex, firstNumber); 
     } 
    } 
} 
+0

Параметры являются условием. –

+0

Да, и я должен реализовать функцию согласно определению, указанному –

+0

@mungaihpk, проверить мое обновление. –

Смежные вопросы