Rekursive Funktion zum zurückgeben der Durchschnitt der Ziffern einer Zahl

Ich bin versucht, erstellen Sie eine rekursive Funktion, gibt den Mittelwert der zahlen in einer Reihe. Zum Beispiel der Durchschnitt der Zahl 123 ist 2. Ich weiß, wie ich eine Funktion schreiben, die Summen der Ziffern.

public static int sum (int n) {
    if (n<10)
        return n;
    return n%10 + sum(n/10);
}

Ich weiß auch, wie man zählt die Ziffern

public static int numCount(int n) {
    if (n<10)
        return 1;
    return 1 + numCount(n/10);
}

Aber ich kann nicht herausfinden, wie man den Durchschnitt berechnen, ohne mit bereits bestehenden Funktionen.

4 Antworten

  • alfasin
    10. Oktober 2018

    Sie können rekursiv Durchlaufen Sie das array während beide erreichten sum und ein index, der zeigt, welche Elemente wurden bereits Durchlaufen:

    public class MyClass {
        public static void main(String args[]) {
            int[] arr = {1,2,3};
            System.out.println(avg(arr)); // 2.0
        }
    
        private static double avg(int[] arr) {
            return avg(arr, 0, 0);
        }
    
        private static double avg(int[] arr, int index, int sum) {
            if (index == arr.length) {
                return (double) sum / index;
            }
            return avg(arr, index + 1, sum + arr[index]);
        }
    }
    

    Demo

  • Mershel
    10. Oktober 2018

    Versuchen Sie, diese:

    int recursive(int num, int startingSize) {
        if(num < 10){
            return num;
        }
        num = num % 10 + recursive(num/10, startingSize++);
    
        return num/startingSize;
    
    }
    

    und zum Beispiel : recursive(123, 1)

  • The Scientific Method
    10. Oktober 2018
    count=0;
    public static int sum (int n) {
        count++;
        if (n<10)
            return n;
        return n%10 + sum(n/10);
    }
    
    double average = (double)sum(123)/count;
    System.out.println("average:"+ average);
    
  • Tony
    10. Oktober 2018

    Ich meine, wenn wir nur reden zahlen, die wir gar nicht brauchen, rekursive Funktionen hier

    String s = Double(10.45).toString();
    Int size = s.length();
    int count = 0;
    Int sum = 0;
    
    for (int i = 0; i < size; I++ ) {
         try {
               sum += Integer.valueOf(s[i]);
               ++count;
        } catch (Exception e) {}
    }
    
    return sum / count;
    

    Das sollte geben Sie Sie ein. Durchschnittliche unabhängig von der Anzahl, ganz oder real.