2016-03-29 8 views
0

Ich brauche die Anzahl der Zahlen kleiner als die erste ganze Zahl in einem Array mit Rekursion. Ich habe eine Funktionsdefinition wieGet Count von Array mit Rekursion

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

Ich bin nicht eine Schleife oder globale/statische Variable verwenden soll. Wie kann ich meine Implementierung unten konvertieren, um die beiden obigen Bedingungen zu erfüllen. Ich habe kürzlich another ähnliche Frage gestellt, aber das ist ein bisschen anders aufgrund der Notwendigkeit, die Zählvariable zu verfolgen. Wenn jemand helfen kann, werde ich es wirklich zu schätzen wissen. Unten ist meine Implementierung mit einer Schleife.

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

Es funktioniert, aber das ist nicht die erwartete Implementierung. –

Antwort

3

Wahrscheinlich brauchen Sie nicht so viel Parameter:

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

und Sie sollten es aufrufen, mit (zum Beispiel):

countGreaterThanFirst(someArray, 1); 

Wenn Sie finden gemeint "alle Zahlen zwischen numbers[startIndex] und numbers[endIndex], die größer sind als firstNumber, dann die imple mentation sollte dem oben genannten ziemlich ähnlich sein:

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

Die Parameter sind eine Bedingung. –

+0

Ja, und ich muss die Funktion gemäß der Definition –

+0

@mungaihpk implementieren, Checkout mein Update. –