¿Cómo salir de un método, es decir, cómo puedo volver de una función en esta recursión en Java?

public class solution {

    public static int countZerosRec(int input){

      int n=0;
      int k =0;
      int count=0;
      //Base case
      if(n==0)
      {
        return; // How can i return the method from here, i.e how can i stop the execution of the recursive program now.
      }

      k=input%10;
      count++;
      n=input/10;
      countZerosRec(n);
      int myans=count;
      return myans;


    }
}

Por favor, ayúdame a salir de este método. Este es un programa para contar el número de ceros.

Ejemplo, 34029030 y = 3

0
Raghav Sharma 1 mar. 2018 a las 05:53

5 respuestas

La mejor respuesta

Puedes probar el siguiente enfoque:

public class MyClass {
    public static void main(String args[]) {


        System.out.println("total zeroes = " + returnZeroesCount(40300));
    }
    public static int returnZeroesCount(int input){
        if(input == 0)
            return 0;
        int n = input % 10;
        return n == 0 ? 1 + returnZeroesCount(input / 10) : returnZeroesCount(input / 10);
    }
}

Cómo funciona: suponiendo que input > 0, tratamos de obtener el último dígito del número tomando el módulo por 10. Si es igual a cero, agregamos uno al valor que volveremos. ¿Y cuál será el valor que estaríamos devolviendo? Será el número de ceros presentes en el número restante después de sacar el último dígito de input.

Por ejemplo, en el siguiente caso, 40300: sacamos 0 en el primer paso, por lo que devolvemos 1 + número de ceros en 4030. De nuevo, parece que hemos llamado a nuestra función recursiva para la entrada 4030 ahora. Entonces, nuevamente devolvemos 1 + número de ceros en 403.

En el siguiente paso, dado que el último número es 3, simplemente devolvemos 0 + número total de ceros en 40 o simplemente como número total de ceros presentes en 40 y así sucesivamente.

Para la condición final, verificamos si la entrada es en sí misma 0. Si es cero, entonces esto significa que hemos agotado el número de entrada y no hay más números para verificar. Por lo tanto, devolvemos cero en ese caso. Espero que esto ayude.

2
CodeHunter 1 mar. 2018 a las 06:15

Si su enfoque principal es encontrar el número de ceros en un número dado, puede usar esto alternativamente:

     int numOfZeroes =0;
     long example = 670880930;
     String zeroCounter = String.valueOf(example);
     for(int i=0; i< example.length();i++){
         if(zeroCounter.charAt(i) ==0){
             numOfZeroes++;
         }

     }
      System.out.print("Num of Zeros are"+ numOfZeroes);` `
0
Novice 1 mar. 2018 a las 03:46

En lugar de publicar un código de respuesta a su pregunta, publicaré algunos consejos para que se mueva.

  1. Como dijo @jrahhali, como es su código, no pasará el return declaración dentro del bloque if (que es un error BTW, porque tiene un retorno int tipo).

  2. Recomiendo que mueva las dos últimas líneas a alguna llamada función (como un método main). De esa manera toda esta función lo que hay que hacer es hacer un procesamiento básico y seguir adelante.

  3. No está marcando k en absoluto. Tal como está, su count va a siempre incremente.

Espero que esto sea suficiente para que puedas resolver las cosas.

0
cst1992 1 mar. 2018 a las 06:16
int count =0;
private int getZeroCount(int num){
         if(num+"".length == 1){
                  if(num==0){
                        count++;
                  }
                  return count;
         }
         if(num%10 == 0){
                  count++;
         }
         num /= 10;
         getZeroCount();

}

0
suhasini 1 mar. 2018 a las 08:45

Método1:

public static int countZero1(int input) {
    int count = 0;
    //The loop takes the remainder for the value of the input, and if it is divided by 10, then its number of digits is 0.
    // When the value of the input is less than 0, the cycle ends
    while (input >0){
        if (input % 10 == 0){
            count ++;
        }
        input /= 10;
    }
    return count;
}

Método2:

private static int count = 0;
public static int countZero2(int input) {
    //Recursive call function
    if (input % 10 == 0){
        count ++;
    }
    input /= 10;
    if (input <= 0){
        return count;
    }else {
        return countZero2(input);
    }
}
-2
telami 1 mar. 2018 a las 06:22