java 实验室:数数数字,我做得怎么样?

omhiaaxx  于 2023-04-10  发布在  Java
关注(0)|答案(1)|浏览(85)

这是我的代码,我想知道我做得如何,以简化这一点?我只是想尽我所能,以更好地了解Java。

import java.util.Scanner;

public class LabProgram {
   
   /* TODO: Write recursive digitCount() method here. */
   public static int digitCount(int userNum) {
    if (userNum == 0) {
        return 0;
    }
    return 1 + digitCount(userNum/10);
    
   }
   public static void main(String[] args) {
      Scanner scnr = new Scanner(System.in);
      int num, digits;
      
      num = scnr.nextInt();
      digits = digitCount(num);
      System.out.println(digits);
   }
}
tag5nh1u

tag5nh1u1#

首先,如果输入为0,则代码无法工作。

当传入0时,您的函数立即返回0位数,这是错误的。输入数字0由个位数组成,因此结果应该是1

其次,可以使用tail-recursion优化递归函数。

public static int digitCount(int userNum) {
    return digitCountRec(userNum, 0);
}

// Helper function performing tail recursion
private static int digitCountRec(int number, int digitCount) {
   if (number == 0) {
       return digitCount == 0 ? 1 : digitCount;
   }
   return digitCountRec(number / 10, digitCount + 1);
}

相关问题