Метод рекурсии, который возвращает количество цифр для данного целого числа - PullRequest
0 голосов
/ 30 апреля 2018

Необходимо написать метод, который возвращает количество цифр для целого числа.

Сначала я делал это с использованием итеративного подхода, и все работало просто отлично, однако, когда я хочу редактировать код с помощью рекурсии, я всегда застреваю при первом подсчете и не могу понять, почему. Любая помощь очень ценится.

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;

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018

В рекурсивном методе вам необходимо вернуть некоторое значение, основанное на уменьшении размера входного значения и объединении его с вашим текущим счетчиком, например,

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

   return 1 + (numberLength(n/10)); //This line combines the result
}
0 голосов
/ 30 апреля 2018

Возможное решение может выглядеть так:

    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
}
0 голосов
/ 30 апреля 2018

Проблема в том, что вы отбрасываете результат numberLength(n / 10);

Вы, вероятно, хотели напечатать:

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