Java 返回给定整数位数的递归方法

Java 返回给定整数位数的递归方法,java,recursion,digits,Java,Recursion,Digits,需要编写一个方法,返回整数的位数 起初,我使用迭代的方法,一切都很好,然而,当我想用递归编辑代码时,我总是在第一次计数时卡住,不知道为什么。 非常感谢您的帮助 public static int numberLength(int n) { if (n < 0) { n *= (-1); } else if (n == 0) { return 1; } int digits = 0; if (n > 0) {

需要编写一个方法,返回整数的位数

起初,我使用迭代的方法,一切都很好,然而,当我想用递归编辑代码时,我总是在第一次计数时卡住,不知道为什么。 非常感谢您的帮助

public static int numberLength(int n) {
    if (n < 0) {
      n *= (-1);
    } else if (n == 0) {
      return 1;
    }

    int digits = 0;
    if (n > 0) {
      digits += 1;
      numberLength(n / 10);
    }
    return digits;
公共静态整数长度(整数n){
if(n<0){
n*=(-1);
}else如果(n==0){
返回1;
}
整数位数=0;
如果(n>0){
位数+=1;
长度(n/10);
}
返回数字;

问题是您正在丢弃
numberLength(n/10);

您可能想键入:

int digits = 0;
if (n > 0) {
  return 1 + numberLength(n / 10);
}
return digits;

问题是您正在丢弃
numberLength(n/10);

您可能想键入:

int digits = 0;
if (n > 0) {
  return 1 + numberLength(n / 10);
}
return digits;

在递归方法中,您需要在减少输入值大小的基础上返回一些值,并将其与当前计数相结合,例如

public static int numberLength(int n){ 
   if(n < 10){ 
     return 1; 
   } 

   return 1 + (numberLength(n/10)); //This line combines the result
}
公共静态整数长度(整数n){
如果(n<10){
返回1;
} 
返回1+(numberLength(n/10));//此行合并结果
}

在递归方法中,您需要在减少输入值大小的基础上返回一些值,并将其与当前计数相结合,例如

public static int numberLength(int n){ 
   if(n < 10){ 
     return 1; 
   } 

   return 1 + (numberLength(n/10)); //This line combines the result
}
公共静态整数长度(整数n){
如果(n<10){
返回1;
} 
返回1+(numberLength(n/10));//此行合并结果
}

可能的解决方案如下所示:

    public static int numberLength(int n){

    if(n < 0){
        return numberLength(-n);
    }

    else if(n == 0){
        return 0;
    }
    else{
        return 1 + numberLength(n/10);
    }
}

public static void main(String[] args){
    System.out.println(numberLength(-152555)); //returns 6
}
公共静态整数长度(整数n){
if(n<0){
返回数字长度(-n);
}
else如果(n==0){
返回0;
}
否则{
返回1+数字长度(n/10);
}
}
公共静态void main(字符串[]args){
System.out.println(numberLength(-152555));//返回6
}

可能的解决方案如下所示:

    public static int numberLength(int n){

    if(n < 0){
        return numberLength(-n);
    }

    else if(n == 0){
        return 0;
    }
    else{
        return 1 + numberLength(n/10);
    }
}

public static void main(String[] args){
    System.out.println(numberLength(-152555)); //returns 6
}
公共静态整数长度(整数n){
if(n<0){
返回数字长度(-n);
}
else如果(n==0){
返回0;
}
否则{
返回1+数字长度(n/10);
}
}
公共静态void main(字符串[]args){
System.out.println(numberLength(-152555));//返回6
}

如果(n==0){return 1;}
”为什么?如果n=0,这意味着没有更多的数字,所以返回0,没有?从我的角度来看,如果用户键入0,这是1个数字。我的问题是,输出总是1@vin表示0需要多少位数?n=4(例如)您的代码将返回2位数字。因为n>0您计算1位数字,然后使用n/10(5/10=0)执行子步骤。它将输入条件n==0,并将1添加到数字。如果(n==0){return 1;},则最终返回值将为2“
为什么?如果n=0,则表示没有更多的数字,因此返回0,否?从我的角度来看,如果用户键入0,则为1位。我的问题是,输出总是1@vin表示0需要多少位数?例如,当n=4时,您的代码将返回2位数。因为n>0,您计算1位数,然后使用n/10(5/10=0)执行子步骤。它将输入条件n==0,并将1添加到数字。然后,最终返回值将为2