Estoy simplemente tratando de convertir a Binario con recursividad. Estoy teniendo problemas con la instrucción return. Esto compila pero da un error de desbordamiento cuando se ejecuta. No sé qué volver (o si mi afirmación es incorrecta) para evitar este error.

Gracias!

public static String convertToBinary(int number)
{
  if(number > 0)
    {
      convertToBinary(number / 2);
      convertToBinary((number % 2 ));
     }

   return convertToBinary((number));
}
Es esta tarea? (suponiendo que sea) por favor etiqueta como tal.
Usted necesita una base de caso. Esto sólo funciona para siempre (o, intenta hasta que llegue un desbordamiento).
Independientemente de tener una base de caso o no, el final de la línea se llama a sí mismo, con los mismos argumentos, por lo que nada cambia en el siguiente nivel hacia abajo.
Eso también. Ahora no llegar.
Ya tiene binario. int number ya es binario. Tu pregunta no tiene sentido.

OriginalEl autor user1315954 | 2012-04-05

14 Comentarios

  1. 4

    Su problema estaba llamando convertToBinary en tanto número 2 y número%2 creo. Este código funciona muy bien para mí y no es tan diferente de lo que había:

    import java.util.Scanner;
    
    public class DecToBin {
    
    public static void main(String[] args) {
    
        int input;
        Scanner scan = new Scanner(System.in);
    
        System.out.print("Enter number to convert to binary: ");
        input = scan.nextInt();
        convert(input);
    
    }
    
    public static void convert(int num) {
        if (num>0) {
            convert(num/2);
            System.out.print(num%2 + " ");
        }
    }
    
    }
    Aunque este código es recursivo, que probablemente no es lo que era necesario, suponiendo que, de hecho, esta fue una tarea.

    OriginalEl autor Chris

  2. 4

    Bien, el problema parece ser que no estás haciendo nada en su método recursivo.

    En su forma más básica, su método recursivo debe contener:

    1. Uno o más escapar de condiciones.
    2. Llamadas recursivas a sí mismo.

    (Esto es una simplificación de la vista, pero va a hacer por ahora.)

    El problema es que faltan algunos de escape en condiciones de manejar el caso de que el parámetro a ser un único bit de largo, que es cuando no se puede subdividir más.

    El otro problema con el código, es que no estás haciendo nada con el resultado de las llamadas recursivas. Se debe almacenar y concatenar.

    Sugiero que empezar de nuevo: escribir un método que convierte un único bit de primera (no recursiva), a continuación, añadir la recursividad. (Un consejo general: no tengas miedo de tirar a la basura el código y empezar de nuevo desde cero.)

    OriginalEl autor biziclop

  3. 3

    Suponiendo que esta es la tarea voy a señalar que el principal error..

    return convertToBinary((number));

    La devolución debe devolver un valor, no una llamada a una función. Esta será sólo la adición de un estado recursiva pilas que lleva a su desbordamiento. Intente guardar los valores de su anterior llamadas en una variable y de regreso.

    OriginalEl autor RyanS

  4. 1

    Una vez number llega a cero, el método simplemente se llama a sí mismo una y otra vez. El final return necesita para volver a algo más – como una cadena. Habiendo dicho eso, no creo que este enfoque es muy óptimo.

    Incluso peor, es que siempre llama a sí misma una y otra vez, no importa lo que el valor de number es.

    OriginalEl autor Rory Hunter

  5. 1

    Tratar a continuación: la

    public static String dec2Bin(int num) {
        String result = ((num % 2 == 0) ? "0" : "1"); //expr
    
        if (abs(num) > 1) {
            result = dec2Bin(num / 2) + result;
        }
    
        return result;
    }

    OriginalEl autor user1658283

  6. 0

    Esto funciona, pero tienes que imprimir desde finales

    static void printBinary(int x){
         if(x==0)System.out.printf("%3d", x);
          else{
               System.out.printf("%3d",x%2);
               printBinary(x/2);
          }
    }

    OriginalEl autor Bikky Kumar

  7. 0

    Siguiente funcionará de forma recursiva. Si el número es negativo se le añade «-» como prefijo de resultado.

        void printBinary (int n) {
                if (n < 0) {         //base case
                    System.out.print("-");
                    printBinary(-n);
                } else if (n < 2) {    //base case
                    System.out.print(n);
                    return;
                } else {
                    printBinary(n/2);   //recursive step
                    int answer = n%2;   
                    System.out.print(answer);
                }
    
            }

    OriginalEl autor i.AsifNoor

  8. 0
    class DecBin {
        static int convert(int i) {
            if (i > 0) {
                convert (i/2);
                System.out.println(i%2);
                return 0;
            } else {
                return 0;
            }
         }
    
        public static void main(String[]  args) {
            DecBin.convert(10);
        }
    }

    OriginalEl autor Benny isaac

  9. -1

    Traté de crear un genérico sub-rutina que toma cualquier número entero Decimal & convertir a una BASE suficiente.

    private Integer convertToBaseN(int num,int n, int pow)
    {
        Integer r = num%n;
    
        if(num < n)
            return new Double((Math.pow(10, pow-1))*r.doubleValue()).intValue();
    
        return convertToBaseN(num/n, n,pow+1)+ 
                new Double(Math.pow(10, pow-1)*r.doubleValue()).intValue();
    }
    
        num :- Decimal No you want to convert.
        n:- Base to which you want to convert ( n =2 in your case).
        pow = 1 (fixed);
    
    
        Input=> convertToBaseN(503,5, 1); Output=> 4003
        Input=> convertToBaseN(7,2, 1); Output=> 111

    Precaución:- no va a funcionar para los números negativos.

    No hay ningún número entero decimal aquí.

    OriginalEl autor Aiden

  10. -1

    Acaba de agregar el archivo binario conversión de (número/2*10) para el resto de la serie:

    int binary(int dec) {
        int remainder=dec%2;
    
        if (dec==1 || dec==0)
            return dec;
        else
            return remainder + (binary(dec/2)*10);
    }

    OriginalEl autor Faiq arif

  11. -1
    public class DecImalToBinary {
        public static String decimalToBinary(int num){
            StringBuilder sb= new StringBuilder();
            if (num <2){
                return ""+ num;
            }
            else{
                return (sb.append(num%2)) + decimalToBinary((num/2));           
            }
        }
    
        public static void main(String[] args){
            System.out.println(decimalToBinary(8));
        }
    }
    Podría proporcionar más información en su respuesta acerca de lo que está sucediendo en el código para responder a la pregunta.

    OriginalEl autor Esehak Hussen

  12. -1
    public String convertirABinario(int n){
        String b = "";
        if (n == 0 || n == 1){
          b = "" + n;
        }
        else{
          b = b + convertirABinario(n/2) + n%2;
        }
        return b;
    }
    Bienvenido a StackOverflow Julian. Podría usted por favor refinar su fragmento de código para mejorar la legibilidad? Asimismo, sírvanse proporcionar algunos descriptivo contexto, en cuanto a por qué usted piensa que esto es una solución a la cuestión. Para obtener ayuda, consulte Cómo Escribir una Buena Respuesta en StackOverflow.

    OriginalEl autor Julián Rodríguez Brenes

  13. -1

    Aquí está mi solución:

     public static String binaerRec(int number)
    {
        if (number > 1)
        {
            return binaerRec(number / 2) + number % 2;
        } else
        {
            return 1 + "";
        }
    }

    divertirse

    Integer.parseInt() ya hace el número decimal a binario conversión. El resto es sólo una pérdida de tiempo. Sin embargo crédito por ser casi la única respuesta hasta el momento en que reconoce que la entrada no puede ser un int.

    OriginalEl autor markus

Dejar respuesta

Please enter your comment!
Please enter your name here