Función recursiva que devuelva el promedio de los dígitos en un número

Estoy tratando de crear una función recursiva que devuelva el promedio de los dígitos de un número. Por ejemplo, el promedio del número 123 es de 2. Yo sé cómo se escribe una función que suma los dígitos.

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

También sé cómo contar los dígitos

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

Sin embargo, yo no puedo entender cómo calcular el promedio sin el uso de pre funciones ya existentes.

4 Respuestas

  • alfasin
    10 de octubre de 2018

    Usted puede recorrer recursivamente la matriz, mientras que el mantenimiento de las dos acumulativo sum y un índice que muestra los elementos ya estaban a afirmar:

    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 de octubre de 2018

    Intente esto:

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

    y, por ejemplo : recursive(123, 1)

  • The Scientific Method
    10 de octubre de 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 de octubre de 2018

    Me refiero a que si estamos hablando sólo de números no necesitamos ni funciones recursivas aquí

    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;
    

    Que debería darle una. Promedio independientemente de su número, entero o real.