如何递归计算数字的平均值?

时间:2011-09-11 07:42:29

标签: java recursion average

特别是使用Java,解决方案应该基本上与其他语言一起使用。

例如,12345将返回3.

感谢。

6 个答案:

答案 0 :(得分:2)

递归解决方案:

double averageDigits(int number, int sum, int count) {
    if(number==0) {
        if(count==0) {
            return 0;
        }
        return ((double) sum) / ((double) count);
    }
    else {
        return averageDigits(number/10, sum + number % 10, ++count);
    }
}

答案 1 :(得分:0)

如果你只有整数,你可能想要检查mod“%”和简单的除法“/”,并将它与一个循环组合起来计算并加总数字部分。

答案 2 :(得分:0)

伪代码中的

将数字拆分成一个digeds列表,然后计算avg recursiv

double avg(List<Integer> list) {
  if(list.length==0) return 0;
    else return (list.get(0)+ (avg(list.sublist(1)*(lisr.length()-1)))
               /list.length();
}

答案 3 :(得分:0)

不知道java,在javascript中,这会起作用

function avrg(arr){
   avrg.arr = avrg.arr || arr.slice();
   avrg.l = avrg.l || 1/arr.length;
   return arr.length ? (avrg.l*avrg.arr.pop()+avrg(avrg.arr)) : 0;
}

答案 4 :(得分:0)

这就是诀窍:

public class DigitAverage {

    public static void main(String[] args) {
        System.out.println(digitAverage(12345));
    }

    private static double digitAverage(int remainder, int... depth) {

        boolean first = false;
        if (depth.length == 0) {
            depth = new int[] { 1 };
            first = true;
        } else {
            depth[0] = depth[0] + 1;
        }
        if (remainder < 10) {
            return remainder;
        }
        double result = remainder % 10 + digitAverage(remainder / 10, depth);
        if (first) {
            result = result / depth[0];
        }
        return result;
    }
}

请注意,此函数仅需要数字作为输入,调用者不会初始化递归的内部“簿记”参数。

答案 5 :(得分:0)

public String getAverage(String num) {
    try {
        Integer.parseInt(num);
    } catch (NumberFormatException e) {
        return "Invalid number";
    }
    int length = num.length();
    int total;
    int i;
    String[] digits = num.split("");
    for (String s : digits) {
        i = Integer.parseInt(s);
        total += i;
    }
    return (total / length).toString();
}