【问题标题】:How to calculate the average of digits of a number recursively? [closed]如何递归计算数字的位数? [关闭]
【发布时间】:2011-09-11 07:42:28
【问题描述】:

特别是对于 Java,该解决方案基本上应该适用于其他语言。

例如,12345 将返回 3。

谢谢。

【问题讨论】:

    标签: java recursion average


    【解决方案1】:

    递归解:

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

    【讨论】:

    • 在这个解决方案中,调用者必须为 sum 和 count 传递适当的初始值,否则结果将是错误的 - 不好。
    【解决方案2】:

    如果您只有整数,您可能需要检查 mod "%" 和简单除法 "/" 并将其与循环结合以计算和求和数字部分。

    【讨论】:

      【解决方案3】:

      在伪代码中:

      在挖掘列表中拆分数字,然后计算平均递归

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

      【讨论】:

        【解决方案4】:

        不了解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;
        }
        

        【讨论】:

          【解决方案5】:
          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();
          }
          

          【讨论】:

            【解决方案6】:

            这就是诀窍:

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

            注意这个函数只需要输入数字,调用者没有初始化递归的内部“簿记”参数。

            【讨论】:

              猜你喜欢
              • 2023-02-04
              • 1970-01-01
              • 1970-01-01
              • 2018-06-29
              • 2019-01-20
              • 1970-01-01
              • 1970-01-01
              • 2021-05-16
              • 1970-01-01
              相关资源
              最近更新 更多